Java SwingJTable
では、 を拡張するテーブル モデル クラスを使用する を作成しましたDefaultTableModel
。テーブルの 1 つの行の値はブール型であるため、これらはチェック ボックスとして表示されます。これらのチェック ボックスに「アイテム リスナー」クラスを追加したいので、これらのチェック ボックスをそれぞれ初期化する必要があります。しかし、これらがテーブル モデルによって自動的に作成される場合はどうすればよいでしょうか。
質問する
310 次
2 に答える
2
これらの CheckBoxes は基になるデータを変更するため、 を追加してその列のイベントにTableModelListener
反応するだけで十分です。tableChanged
jTable1.getModel().addTableModelListener(new TableModelListener() {
final int YOUR_BOOLEAN_COLUMN = 1;
public void tableChanged(TableModelEvent e) {
if(e.getColumn() == YOUR_BOOLEAN_COLUMN) {
// get value from model (not affected if user re-orders columns)
TableModel tableModel = jTable1.getModel();
Boolean value =
(Boolean)tableModel.getValueAt(e.getFirstRow(), YOUR_BOOLEAN_COLUMN);
System.out.println(value);
}
}
});
于 2010-02-01T16:53:09.503 に答える
1
簡単に言えば、次の 2 つの理由から、テーブル内の JCheckboxes に ActionListeners を追加できないということです。
- デフォルトの設定では、単一の JCheckbox を使用してすべてのチェックボックス セルがレンダリングされます。
- JCheckBox を含むテーブル セルでのマウス クリックは、チェックボックスに渡されず、テーブルに吸収されます。
なぜこれらのイベントが必要なのかを尋ねることが重要だと思います。あなたが与える答えは、取るべき最善のアプローチを反映しています。
ユーザーがチェックボックスの状態を編集できるようにする場合、最良の方法はTableModel.isCellEditable(int, int)
、チェックボックス列に対して true を返すようにオーバーライドし、TableModel が更新されたときに元のデータを単純に更新することです。
于 2010-02-01T17:48:17.183 に答える