首頁 >Java >java教程 >如何在專案選擇時擷取包含 JComboBox 的 JTable 儲存格的行索引?

如何在專案選擇時擷取包含 JComboBox 的 JTable 儲存格的行索引?

Linda Hamilton
Linda Hamilton原創
2024-12-17 10:43:25701瀏覽

How to Retrieve the Row Index of a JTable Cell Containing a JComboBox on Item Selection?

當JTable 單元格中的JComboBox 觸發ItemEvent 時如何取得CellRow

使用其中包含JTable 時單元格中的JTable 時單元格中會遇到需要在項目變更時檢索JComboBox 所在的特定行。這可能很棘手,因為與 JComboBox 關聯的 ItemListener 不會直接提供此資訊。

覆蓋預設 TableCellEditor

一種方法是覆寫預設 TableCellEditor 並提供您自己的包含行存取的實作。透過重寫getTableCellEditorComponent() 方法,您可以取得行號作為參數:

import javax.swing.*;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class CustomTableCellEditor extends DefaultCellEditor implements TableCellRenderer {

    private int currentRow; // Add a field to track the current row

    @Override
    public TableCellEditorComponent getTableCellEditorComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        currentRow = row; // Capture the current row
        return super.getTableCellEditorComponent(table, value, isSelected, hasFocus, row, column);
    }
}

重寫TableModel 的getValueAt() 方法

如果需要根據同一行中另一列的值執行操作,您可以重寫TableModel 的getValueAt()方法來調整值根據更改的項目返回。例如:

import javax.swing.table.AbstractTableModel;

public class CustomTableModel extends AbstractTableModel {

    @Override
    public Object getValueAt(int row, int column) {
        if (column == 1) {
            return "Dependent Value: " + this.getValueAt(row, 2); // Modify the value based on the selected item in column 2
        } else {
            return super.getValueAt(row, column);
        }
    }
}

透過實作這些技術,您可以有效地擷取與 JTable 儲存格內的 JComboBox 中的 ItemEvent 關聯的 CellRow,使您能夠根據所選項目和行執行所需的操作。

以上是如何在專案選擇時擷取包含 JComboBox 的 JTable 儲存格的行索引?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn