Home >Java >javaTutorial >How to Determine the JTable Row Containing a JComboBox That Triggered an ItemEvent?
Initial Question:
You aim to ascertain the row number within a JTable that contains a JComboBox within a specific cell when an ItemEvent is triggered in the JComboBox. This row number is crucial for subsequent actions involving another cell in the same row after the JComboBox modification.
Response:
It appears that you're utilizing a JComboBox as an editor within the JTable. In such scenarios, the getTableCellEditorComponent() method of the TableCellEditor class provides access to the row as one of its parameters. Refer to the following resources for further insights:
Addendum for Value Synchronization:
To synchronize the value of a dependent column with that of the JComboBox column, override the getValueAt() method of the table model. This allows you to return the updated value based on the altered content of the JComboBox column.
Additional Example:
The below code showcases this approach, keeping a dependent column synchronized with the JComboBox column using the overridden getValueAt() method:
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); } }
The above is the detailed content of How to Determine the JTable Row Containing a JComboBox That Triggered an ItemEvent?. For more information, please follow other related articles on the PHP Chinese website!