>Java >java지도 시간 >ItemEvent 이후 JTable에서 JComboBox의 행 번호를 얻는 방법은 무엇입니까?

ItemEvent 이후 JTable에서 JComboBox의 행 번호를 얻는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-13 22:47:11860검색

How to Get the Row Number of a JComboBox in a JTable After an ItemEvent?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.