Rumah >Java >javaTutorial >Bagaimana untuk Mendapatkan Nombor Baris JComboBox dalam JTable Selepas ItemEvent?

Bagaimana untuk Mendapatkan Nombor Baris JComboBox dalam JTable Selepas ItemEvent?

DDD
DDDasal
2024-12-13 22:47:11860semak imbas

How to Get the Row Number of a JComboBox in a JTable After an ItemEvent?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn