ホームページ > Java > &#&チュートリアル > ItemEvent の後に JTable 内の JComboBox の行番号を取得するにはどうすればよいですか?

ItemEvent の後に JTable 内の JComboBox の行番号を取得するにはどうすればよいですか?

DDD
リリース: 2024-12-13 22:47:11
オリジナル
859 人が閲覧しました

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 を取得するためのソリューション

コンボ ボックスをエディタとして使用する場合、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 Columns Synchronized

依存列間の同期を維持するには、オーバーライドできます。モデルの 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート