當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中文網其他相關文章!