Bagaimanakah saya boleh mendapatkan CellRow JComboBox dalam JTable apabila ItemEvent berlaku?
Anda mempunyai JTable dengan lajur yang mengandungi JComboBox dan ItemListener yang dilampirkan pada JComboBox untuk bertindak balas kepada perubahan. Walau bagaimanapun, ItemListener tidak mempunyai keupayaan untuk mendapatkan semula baris ComboBox yang diubah suai. Untuk beroperasi pada lajur lain dalam baris yang sama apabila ComboBox berubah, anda memerlukan nombor baris.
Memahami Isu
Dalam contoh kod yang diberikan, apabila perubahan dikesan dalam ComboBox, ComboBoxListener mendapatkan semula item yang terjejas. Walau bagaimanapun, ia tidak menyediakan cara untuk mengakses baris yang sepadan dalam JTable.
Penyelesaian untuk Mendapatkan CellRow
Apabila anda menggunakan Kotak Kombo sebagai editor , kaedah TableCellEditor getTableCellEditorComponent() menyediakan baris sebagai parameter. Merujuk contoh berkaitan yang dipautkan dalam jawapan, anda boleh mendapatkan semula CellRow sebagai:
public void itemStateChanged(ItemEvent e) { // Get the table cell editor TableCellEditor editor = table.getCellEditor(); // Get the row of the cell being edited int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...)); //... }
Mengekalkan Lajur Disegerakkan
Untuk mengekalkan penyegerakan antara lajur bergantung, anda boleh mengatasi kaedah getValueAt() model untuk mengemas kini nilai secara dinamik berdasarkan nilai berkaitan dalam baris yang sama. Sebagai contoh, anda boleh mengemas kini nilai "lajur lain" dalam kaedah setValueAt() model sebelum menaikkan acara kemas kini.
Contoh Pelaksanaan
Kod berikut menunjukkan penyelesaian ini:
import javax.swing.table.DefaultTableModel; //... // Override getValueAt() to keep columns synchronized @Override public Object getValueAt(int row, int col) { if (col == DEPENDENT_COL) { return "C2:" + this.getValueAt(row, ITEM_COL); } else { return super.getValueAt(row, col); } } //... // Attach a new ItemListener combo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { // Get the table cell editor TableCellEditor editor = table.getCellEditor(); // Get the row and update the other column int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...)); model.setValueAt("C2:" + e.getItem(), row, DEPENDENT_COL); } } });
Penyelesaian ini menggabungkan kedua-dua pendekatan untuk menyegerakkan lajur bergantung dan dapatkan semula CellRow.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nombor Baris JComboBox dalam JTable Selepas ItemEvent?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!