ItemEvent가 발생할 때 JTable에서 JComboBox의 CellRow를 어떻게 가져오나요?
다음을 포함하는 열이 있는 JTable이 있습니다. 변경 사항에 응답하기 위해 JComboBox 및 JComboBox에 연결된 ItemListener입니다. 그러나 ItemListener에는 수정된 ComboBox의 행을 검색하는 기능이 없습니다. ComboBox가 변경될 때 같은 행의 다른 열에 대해 작업하려면 행 번호가 필요합니다.
이슈 이해
주어진 코드 예제에서 변경이 발생하면 ComboBox에서 감지되면 ComboBoxListener는 영향을 받은 항목을 검색합니다. 그러나 JTable의 해당 행에 접근하는 방법은 제공하지 않습니다.
CellRow를 검색하는 솔루션
Combo Box를 편집기로 사용하는 경우 , TableCellEditor getTableCellEditorComponent() 메소드는 행을 매개변수로 제공합니다. 답변에 링크된 관련 예제를 참조하면 CellRow를 다음과 같이 검색할 수 있습니다.
public void itemStateChanged(ItemEvent e) { // Get the table cell editor TableCellEditor editor = table.getCellEditor(); // Get the row of the cell being edited int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...)); //... }
Keeping ColumnsSynchronized
종속 열 간의 동기화를 유지하려면 재정의할 수 있습니다. 모델의 getValueAt() 메서드를 사용하여 동일한 행의 관련 값을 기반으로 값을 동적으로 업데이트합니다. 예를 들어 업데이트 이벤트를 발생시키기 전에 모델의 setValueAt() 메서드에서 "다른 열"의 값을 업데이트할 수 있습니다.
구현 예
다음 코드 다음 솔루션을 보여줍니다.
import javax.swing.table.DefaultTableModel; //... // Override getValueAt() to keep columns synchronized @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); } } //... // Attach a new ItemListener combo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { // Get the table cell editor TableCellEditor editor = table.getCellEditor(); // Get the row and update the other column int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...)); model.setValueAt("C2:" + e.getItem(), row, DEPENDENT_COL); } } });
이 솔루션은 두 가지 접근 방식을 결합하여 종속 열을 동기화하고 CellRow.
위 내용은 ItemEvent 이후 JTable에서 JComboBox의 행 번호를 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!