首頁 > Java > java教程 > 如何在 ItemEvent 之後取得 JTable 中 JComboBox 的行號?

如何在 ItemEvent 之後取得 JTable 中 JComboBox 的行號?

DDD
發布: 2024-12-13 22:47:11
原創
859 人瀏覽過

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

當 ItemEvent 發生時,如何取得 JTable 中 JComboBox 的 CellRow?

您有一個 JTable,其欄位包含JComboBox 和附加到 JComboBox 的 ItemListener 以回應變更。但是,ItemListener 缺乏檢索修改後的 ComboBox 行的能力。要在 ComboBox 變更時對同一行中的另一列進行操作,您需要行號。

理解問題

在給定的程式碼範例中,當變更在 ComboBox 中偵測到該項目時,ComboBoxListener 會擷取受影響的項目。但是,它沒有提供存取 JTable 中對應行的方法。

擷取 CellRow 的解決方案

當您使用組合方塊作為編輯器時,TableCellEditor getTableCellEditorComponent() 方法提供行作為參數。參考答案中連結的相關範例,您可以將CellRow 檢索為:

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, ...));
    //...
}
登入後複製

保持列同步

要保持依賴列之間的同步,您可以覆寫模型的getValueAt() 方法根據同一行中的相關值動態更新值。例如,您可以在引發更新事件之前更新模型的 setValueAt() 方法中「其他欄位」的值。

範例實作

以下程式碼示範了這些解決方案:

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);
        }
    }
});
登入後複製

此解決方案結合了兩種方法來同步依賴列並檢索細胞行。

以上是如何在 ItemEvent 之後取得 JTable 中 JComboBox 的行號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板