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