Saya memiliki JTable di mana saya mengatur ukuran kolom sebagai berikut:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(27);
table.getColumnModel().getColumn(1).setPreferredWidth(120);
table.getColumnModel().getColumn(2).setPreferredWidth(100);
table.getColumnModel().getColumn(3).setPreferredWidth(90);
table.getColumnModel().getColumn(4).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(120);
table.getColumnModel().getColumn(7).setPreferredWidth(100);
table.getColumnModel().getColumn(8).setPreferredWidth(95);
table.getColumnModel().getColumn(9).setPreferredWidth(40);
table.getColumnModel().getColumn(10).setPreferredWidth(400);
Ini berfungsi dengan baik, tetapi ketika tabel dimaksimalkan, saya mendapatkan ruang kosong di sebelah kanan kolom terakhir. Apakah mungkin untuk mengubah ukuran kolom terakhir ke akhir jendela saat ukurannya diubah?
Saya menemukan AUTO_RESIZE_LAST_COLUMN
properti di dokumen tetapi tidak berhasil.
Edit: JTable
dalam JScrollPane
set ukuran yang diinginkan.
Dengan
JTable.AUTO_RESIZE_OFF
, tabel tidak akan mengubah ukuran kolom mana pun untuk Anda, jadi ini akan mengambil pengaturan yang Anda sukai. Jika itu adalah tujuan Anda untuk memiliki kolom default ke ukuran pilihan Anda, kecuali untuk memiliki kolom terakhir mengisi sisa panel, Anda memiliki pilihan untuk menggunakanJTable.AUTO_RESIZE_LAST_COLUMN
autoResizeMode, tapi mungkin paling efektif bila digunakan denganTableColumn.setMaxWidth()
bukannya TableColumn. setPreferredWidth () untuk semua kecuali kolom terakhir.Setelah Anda puas bahwa
AUTO_RESIZE_LAST_COLUMN
ternyata berfungsi, Anda dapat bereksperimen dengan kombinasiTableColumn.setMaxWidth()
danTableColumn.setMinWidth()
sumber
JTable.AUTO_RESIZE_LAST_COLUMN
didefinisikan sebagai "Selama semua operasi pengubahan ukuran, terapkan penyesuaian hanya ke kolom terakhir" yang berarti Anda harus menyetel autoresizemode di akhir kode , jika tidak, setPreferredWidth () tidak akan memengaruhi apa pun!Jadi dalam kasus Anda ini adalah cara yang benar:
sumber
Gunakan metode ini
Atau tingkatkan
JTable
kelas:Lalu
sumber
Membaca ucapan Kleopatra (kali kedua dia menyarankan untuk melihat javax.swing.JXTable , dan sekarang saya minta maaf saya tidak melihat pertama kali :)) Saya sarankan Anda mengikuti tautan
Saya punya solusi ini untuk masalah yang sama: (tapi saya sarankan Anda mengikuti tautan di atas) Saat mengubah ukuran tabel, skala lebar kolom tabel ke lebar total tabel saat ini. untuk melakukan ini saya menggunakan array int global untuk lebar kolom (relatif)):
Saya menggunakan fungsi ini untuk mengatur lebar kolom tabel:
Saat mengatur data yang saya panggil:
dan saat mengubah saya memanggil ComponentListener yang disetel ke induk tabel (dalam kasus saya, JScrollPane yang merupakan wadah dari tabel saya):
perhatikan bahwa tabel JTable juga global:
Dan di sini saya mengatur pendengar:
sumber
akan default perilaku pengubahan ukuran ! Jika metode ini dipanggil di suatu tempat dalam kode Anda SETELAH Anda mengatur properti ubah ukuran kolom, semua pengaturan Anda akan disetel ulang. Efek samping ini bisa terjadi secara tidak langsung. Fe sebagai konsekuensi dari model data yang ditautkan diubah dengan cara yang disebut metode ini, setelah properti ditetapkan.
sumber
Tidak perlu opsi, cukup buat lebar yang diinginkan dari kolom terakhir maksimum dan itu akan mengambil semua ruang ekstra.
sumber
Kode ini berfungsi untuk saya tanpa setAutoResizeModes.
sumber
Gunakan kode ini. Itu berhasil untuk saya. Saya mempertimbangkan untuk 3 kolom. Ubah nilai loop untuk kode Anda.
sumber