私はしばらくの間TableModelListener
( http://www.cs.auckland.ac.nz/compsci230s1c/lectures/xinfeng/swingmodelview.pdf )について読んでいて、を使用するListener
forを実装しようとしています。私のプログラムのさまざまな部分を説明するために、私のクラス。私のメインクラスなので、この tableChanged メソッドがあります。JTable
AbstractTableModel
extends JFrame
implements TableModelListener
@Override
public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE)
System.out.println("It is updated");
if (e.getType() == TableModelEvent.DELETE)
System.out.println("It is deleted");
}
コンストラクターではない私のクラス SwitchTableModelextends AbstractTableModel
は、他の配列から取得した値を表示するテーブルを作成します。実装の一部はこちらJTable 内の List の次の行を表示します。
コンストラクターを使用して SwitchTableModel クラスを呼び出し、JTable と JFrame を作成します。
値が更新されたときに取得するために、この行も追加しました。
public Object getValueAt(int rowIndex, int columnIndex) {
fireTableCellUpdated(rowIndex, columnIndex); ...
自分のデータを編集して保存できるようにしたいのですが、編集できるようJTable
ですが、たとえば空のフィールドにsmthを書いてEnterキーを押すと、データが保持されません。空でないフィールドで smth を変更しようとすると、同じことが起こります。
実際、このコードでは、JFrame が開いている間ずっと「編集されています」と出力し続けます。
私が間違っているかもしれないことは何ですか?
*****編集*****私のコンストラクタは次のようなものです:
final SwitchTableModel model = new SwitchTableModel(user_decide);
JTable table = new JTable(model);
JFrame frame = new JFrame ("Results");
table.getModel().addTableModelListener(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add (toolbar, BorderLayout.PAGE_START);
frame.getContentPane().add (
new JScrollPane(
table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED),
BorderLayout.CENTER);
//frame.add(checkPanel, BorderLayout.PAGE_END);
frame.pack();
frame.setVisible(true);
}