Anda tidak dapat memiliki public voidmetode yang mengembalikan boolean.
Geo
1
Juga metodenya adalahisCellEditable
Matt
Meskipun pendekatan yang Anda tentukan berfungsi, tidak ada metode seperti isEditable di AbstractTableModel. Apa yang ada adalah metode isCellEditable (int, int) yang menggunakan rowIndex dan coulmnIndex sebagai parameter. Pengguna dapat secara selektif mengaktifkan / menonaktifkan pengeditan untuk baris / kolom tertentu dengan mengganti metode "isCellEditable" atau dapat menggunakan implementasi default untuk menonaktifkan pengeditan untuk semua sel.
sateesh
150
Anda dapat mengganti metode isCellEditable dan mengimplementasikan sesuai keinginan Anda, misalnya:
Ini juga merupakan solusi untuk membuat acara klik ganda bekerja dengan benar dengan JTable. Sebuah klik ganda biasanya dikonsumsi oleh sel saat masuk ke mode edit, dan ini akan mencegah sel melakukan itu dan sebagai gantinya mengirim klik ganda ke JTable itu sendiri. Terima kasih atas solusinya, Nelson!
pertapa
2
@Jop maka ada sesuatu yang salah di tempat lain dalam kode Anda - tabel tidak pernah hilang hanya karena model tabel tidak dapat diedit ...
kleopatra
1
@DougHauf tampaknya Anda tidak tahu Java, atau benar-benar bahasa apa pun yang baik karena sebagian besar bahasa menggunakan sintaks yang sama untuk operasi boolean ... yang mengembalikan boolean ... Saya akan merekomendasikan Anda mencari Java yang sangat dasar tutorial dan mulai dari awal. Mencoba melompat ke ayunan seperti ini akan berakhir dengan Anda mempelajari segala sesuatu yang salah.
searchengine27
1
@DougHauf, == adalah alias untuk fungsi Sama dengan yang membandingkan objek (di kiri dan kanan) dan mengembalikan boolean. Saya kira Anda telah menggunakan pernyataan jika yang mengevaluasi boolean dan biasanya digunakan dengan ekspresi semacam ini misalnya jika (a == b) melakukan sesuatu. Cobalah untuk mencetak a == b atau cukup tetapkan ini untuk variabel dan pahami hasilnya.
nelson eldoro
1
Perbaikan di atas juga tidak berhasil untuk saya. Ini menyebabkan kolom tabel dan elemen data menghilang. Tabel saya dibuat dengan table = new JTable (tempTable, columnNames) ;, dimana tempTable adalah String [] [] dan Column Names adalah String []. Saya yakin masalah ini disebabkan oleh DefaultTableModel () baru yang tidak menentukan nama data dan kolom untuk model tabel. Bagaimana cara menentukannya dalam model data. Saya mencoba table.setModel (tableModel (tempTable, columnNames)) ;, tetapi itu menyebabkan kesalahan "tidak dapat menemukan simbol".
Ini bagus jika Anda tidak menggunakan model tabel kustom!
Kingsolmn
27
Tapi Anda tidak akan bisa memilih sel atau baris.
tianz
3
Ini akan terlihat "diklik" di beberapa L & F.
Stommestack
2
Itu bekerja. Terima kasih. Namun, saya masih ingin tahu mengapa metode model data nelson menyebabkan kolom tabel dan elemen data tidak berfungsi.
pengguna1164199
1
Bekerja dengan baik untuk saya!
Colby Cox
10
Jika Anda membuat TableModel secara otomatis dari sekumpulan nilai (dengan "JTable baru (Vektor, Vektor)"), mungkin lebih mudah untuk menghapus editor dari kolom:
JTable table =newJTable(my_rows, my_header);for(int c =0; c < table.getColumnCount(); c++){Class<?> col_class = table.getColumnClass(c);
table.setDefaultEditor(col_class,null);// remove editor}
-1 peretasan acak di lokasi yang tidak tepat tidak pernah menjadi pilihan
kleopatra
Tolong, dapatkah Anda menjelaskan mengapa ini adalah "peretasan acak di lokasi yang tidak tepat"? Menurut dokumen setDefaultEditor () : "Jika editor null, hapus editor default untuk kelas kolom ini."
freesoft
ya, dan kembali ke default untuk Object ;-) Jadi Anda tidak benar-benar menonaktifkan pengeditan (hanya secara tidak sengaja jika salah satu kolom berjenis Object), Anda juga kehilangan kolom yang mungkin memiliki editor kustom. Ada adalah api dimaksudkan untuk diimplementasikan untuk editability sel kontrol, dan itulah model. Segala sesuatu yang lain meretas dan karenanya tidak pantas.
kleopatra
Saya mengerti maksud Anda. Tetapi yang saya pahami dari api adalah, jika saya membuat tabel dengan cara cepat (dengan "JTable baru (Vektor, Vektor)"), maka tabel tersebut akan memiliki editor default untuk semua kolomnya. Jadi, jika saya menjalankan "table.setDefaultEditor (kolom, null)", maka saya akan menghapus editor default dari kolom, sehingga kolom tersebut tidak akan memiliki editor apa pun, dan kolom tersebut tidak dapat diedit. Akankah?
freesoft
Saya telah membuat tabel seperti itu new JTable(Vector, Vector)dan bekerja untuk saya. Saya tidak perlu editor di sel mana pun, jadi Anda memiliki hak pilih.
Dani Sancas
3
Saya menggunakan ini dan berhasil: sangat sederhana dan berfungsi dengan baik.
Jawaban:
Anda dapat menggunakan file
TableModel
.Tentukan kelas seperti ini:
sebenarnya
isCellEditable()
secarafalse
default sehingga Anda dapat mengabaikannya. (lihat: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )Kemudian gunakan
setModel()
metode AndaJTable
.sumber
public void
metode yang mengembalikan boolean.isCellEditable
Anda dapat mengganti metode isCellEditable dan mengimplementasikan sesuai keinginan Anda, misalnya:
atau
Catatan jika JTable Anda menghilang
Jika Anda
JTable
menghilang saat Anda menggunakan ini kemungkinan besar karena Anda perlu menggunakanDefaultTableModel(Object[][] data, Object[] columnNames)
konstruktor sebagai gantinya.sumber
sumber
tambahkan saja
itu bekerja dengan baik untuk saya.
sumber
Jika Anda membuat TableModel secara otomatis dari sekumpulan nilai (dengan "JTable baru (Vektor, Vektor)"), mungkin lebih mudah untuk menghapus editor dari kolom:
Tanpa editor, data tidak akan dapat diedit.
sumber
new JTable(Vector, Vector)
dan bekerja untuk saya. Saya tidak perlu editor di sel mana pun, jadi Anda memiliki hak pilih.Saya menggunakan ini dan berhasil: sangat sederhana dan berfungsi dengan baik.
sumber
buat kelas DefaultCellEditor baru:
dan gunakan setCellEditor:
sumber