JTable セル内の JComboBox が ItemEvent をトリガーするときに CellRow を取得する方法
内部に JComboBox を含む JTable を操作する場合セルでは、項目の変更時に JComboBox が配置されている特定の行を取得する必要が生じる場合があります。 JComboBox に関連付けられた ItemListener はこの情報を直接提供しないため、これは難しい場合があります。
デフォルトの TableCellEditor をオーバーライドする
1 つの方法は、デフォルトの 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 中国語 Web サイトの他の関連記事を参照してください。