如何在 ItemEvent 期间获取 JTable 单元格中 JComboBox 的单元格行
在 JTable 中使用 JComboBox 作为单元格编辑器时,在 ItemEvent 期间获取与已更改的 JComboBox 关联的行可能具有挑战性。在根据 JComboBox 的更改进行更新时,此信息对于访问同一行中的其他列至关重要。
解决方案:
解决此问题的关键是要了解TableCellEditor 的重写方法 getTableCellEditorComponent() 包含行作为参数。下面是一个利用此功能的解决方案:
import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.*; import javax.swing.table.DefaultTableModel; public class JComboBoxCellRowAccess { public static void main(String[] args) { JTable table = createTable(); JComboBox<String> comboBox = new JComboBox<>(new String[] { "Item1", "Item2", "Item3" }); TableColumn column = table.getColumnModel().getColumn(1); column.setCellEditor(new DefaultCellEditor(comboBox)); comboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { int row = getCellRow(comboBox); System.out.println("Row: " + row); } }); } public static int getCellRow(JComboBox<?> comboBox) { TableCellEditor editor = comboBox.getCellEditor(); if (editor != null) { Component component = editor.getTableCellEditorComponent(null, null, true, -1, -1); return ((JTable) component.getParent()).getSelectedRow(); } return -1; } public static JTable createTable() { DefaultTableModel model = new DefaultTableModel(new Object[][] { { "Row 0" }, { "Row 1" }, { "Row 2" } }, new String[] { "Column 1" }); return new JTable(model); } }
使用此解决方案,您可以在 ItemListener 中访问 JComboBox 的行,从而允许您根据需要更新或检索同一行中其他列的信息。
以上是如何在 ItemEvent 期间检索 JTable 单元格内 JComboBox 的行索引?的详细内容。更多信息请关注PHP中文网其他相关文章!