初始问题:
您的目标是确定该行当在特定单元格中触发 ItemEvent 时,JTable 中包含 JComboBox 的编号JComboBox。此行号对于 JComboBox 修改后涉及同一行中的另一个单元格的后续操作至关重要。
响应:
看来您正在使用 JComboBox 作为JTable 中的编辑器。在这种情况下,TableCellEditor 类的 getTableCellEditorComponent() 方法提供对行的访问作为其参数之一。请参阅以下资源以获取更多见解:
值同步附录:
同步值与 JComboBox 列相关的列,重写表模型的 getValueAt() 方法。这允许您根据 JComboBox 列的更改内容返回更新的值。
其他示例:
下面的代码展示了这种方法,保留了依赖列使用重写的 getValueAt() 方法与 JComboBox 列同步:
import javax.swing.*; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; public class Example { private static final int DEPENDENT_COL = 1; private static final int ITEM_COL = 2; private static final String[] columnNames = {"Col 1", "Col 2", "Col 3"}; public static void main(String[] args) { // Create table model DefaultTableModel model = new DefaultTableModel(columnNames, 0) { @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); } } }; // Add rows to table model for (int i = 0; i < 16; i++) { model.addRow(new Object[] {"C1", "C2", "Item1"}); } // Create table and customize JComboBox column JTable table = new JTable(model); TableColumn col = table.getColumnModel().getColumn(ITEM_COL); String[] items = {"Item1", "Item2", "Item3"}; JComboBox combo = new JComboBox(items); col.setCellEditor(new DefaultCellEditor(combo)); // Create the frame and add the table JFrame frame = new JFrame(); frame.add(new JScrollPane(table)); frame.pack(); frame.setVisible(true); } }
以上是如何确定包含触发 ItemEvent 的 JComboBox 的 JTable 行?的详细内容。更多信息请关注PHP中文网其他相关文章!