当 JTable 单元格中的 JComboBox 触发 ItemEvent 时如何获取 CellRow
使用其中包含 JComboBox 的 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中文网其他相关文章!