1

これは私の新しいMyJtable

public void addWidget(Book w) {
    datalist.add(w);
    fireTableRowsInserted(datalist.size()-1, datalist.size()-1);

   }

呼び出しクラス

  MyJtable tv = new MyJtable(a);
        table = new JTable(tv);
        //tv.addWidget(b3);
        JScrollPane pane2 = new JScrollPane(table);

ボタンクリック機能

 public void actionPerformed(ActionEvent e)
   {
    MyJtable tv1 = new MyJtable();
    Book b3 = new Book ("Java nutshell-299", "Ajfdfdfdingya2") ;
    if("Add".equals(e.getActionCommand()))
  {
  JOptionPane.showMessageDialog(null,"Add button is clicked");
  tv1.addWidget(b3);
  }

ボタンをクリックすると、GUIの変更は表示されませんが、電話をかけると

tv1.addWidget(b3);

   }

前に、私はロード時に意味します、そして私は新しい本を見ることができますがボタンクリックでは見えません

4

4 に答える 4

3

メソッド内で作成したばかりの新しいテーブルに行を追加していることがわかりますactionPerformed。通常、アクションを使用して、既存の GUI コンポーネントを変更/変更します。これが、GUI に変化がられない理由である可能性があります。

スクロールペインに表示されるテーブルは、で作成されていると思います

MyJtable tv = new MyJtable(a);
table = new JTable(tv);

新しく作成されたテーブルの代わりに (最初にインスタンス変数にする必要がある) にtable行を追加してみてください。tv

于 2011-01-18T06:33:14.817 に答える
1

setValueAtの具体的な実装でオーバーライドすることを確認してくださいAbstractTableModel。デフォルトの実装は空です。

于 2011-01-18T10:56:02.833 に答える
1

これは私の新しい MyJtable

それは間違いです。テーブルに addWidget() メソッドを含めないでください。

データに対するすべての更新は、TableModel を介して直接行う必要があります。次に、TableModel は、データが変更されたときにテーブル自体を再描画するようにテーブルに通知します。

TableModel 自体の外部で TableModel によって使用されるデータ ストレージにアクセスしないでください。昨日あなたが他の質問をしたとき、私はあなたに完全な解決策を与えました.

于 2011-01-19T04:22:25.687 に答える
1

Andreas_D が重要な問題を特定したと思います。AbstractTableModelの代わりにオーバーライドしているため、問題が発生する可能性もありますDefaultTableModelDefaultTableModelには、イベント起動メソッドの多くがすでに完了しています。

于 2011-01-18T16:31:18.193 に答える