1

私はしばらくの間TableModelListener( http://www.cs.auckland.ac.nz/compsci230s1c/lectures/xinfeng/swingmodelview.pdf )について読んでいて、を使用するListenerforを実装しようとしています。私のプログラムのさまざまな部分を説明するために、私のクラス。私のメインクラスなので、この tableChanged メソッドがあります。JTableAbstractTableModelextends JFrameimplements 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);

}

4

0 に答える 0