3

ビジネス オブジェクトのリストの基になるブール プロパティにバインドする JTable の列があります。また、選択する項目を選択するコンボボックスもあります。基本的に、次のコードをハンドラーとしてコンボボックスに追加しました。

            macroCombo.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JComboBox comboBox = (JComboBox) e.getSource();
                    Predicate filter = (Predicate) comboBox.getSelectedItem();
                    for(SelectableKey key : tableEntries){
                        key.setSelected(filter.evaluate(key));
                    }
                }
            });

また、値に基づいて変更したいコントロールが他にもいくつかあります。現時点では、テーブル内のいくつかのセルのみが状態を選択/選択解除に変更しています。行をクリックするか、複数の行を選択した場合にのみ、UI が更新されます。GUI 自体を再描画するように指示するために必要なハンドラーからの呼び出しはありますか? また、JTable 以外のコントロールを変更する場合、状態を変更するにはどうすればよいでしょうか?

ありがとう

4

1 に答える 1

8

の値を更新するTableModelと、モデルは対応するTableModelEvent(タイプ:)を起動する必要がありますUPDATE

たとえばTableModel、がから拡張されている場合は、変更を加えた後AbstractTableModelでメソッドを呼び出すことができfireTableRowsUpdatedます。

もう1つのアプローチは、TableModelいつ更新されるかを知る方法です(たとえば、含まれているオブジェクトにリスナーを追加することによって)。これにより、他のコードは、のTableModel知識がなくても、に含まれるオブジェクトを簡単に更新できますTableModel。含まれているオブジェクトに加えられた変更を検出すると、TableModelそれ自体がイベントを発生させます。

TableModel私は2番目のアプローチを好みます。これにより、他のすべてのクラスにそれを渡す必要がなくなります。

詳細については、テーブルのチュートリアルを参照してください。

于 2012-08-07T11:59:50.070 に答える