1

MySQL データベースからコンテンツを取得してJTableいる のJPanel( と呼ばれるcur_panel) があります。JTabbedPaneの他のペインのオプションを使用して変更を加えるたびに、テーブルを更新できるようにしたいと考えていますJTabbedPane。データベースから更新されたデータを取得できるように、破棄cur_panelしてから再度構築することで、この問題を回避しました。

誰かがそれを回避するより良い方法を提案できますか? 新しい/変更されたデータのみを取得でき、破棄してから再構築する必要がないようにJPanel

4

1 に答える 1

2

その通りです - を再構築する必要はありませんJPanel。実際、 を再構築する必要さえないはずJTableですTableModel。(また、Model-View-Controller 設計パターンについても読みたいと思うかもしれません)

代わりに、 のデータをリセットする必要がありますTableModelJTableこれにより、再塗装する必要があると思います。そうでない場合は、次のように呼び出すことができます。

table.tableChanged(new TableModelEvent(tableModel));

TableModelまたは、新しいデータを使用して新しいを作成する方がよいと思われる場合は、次のようにします。

table.setModel(newTableModel);

これは、何か他のものによって更新された aのSSCCEです...データベース接続を a からの入力に置き換えましたが、アイデアが得られるはずです。JTableJTextField

public class TableTest {    
  public static void main(String[] args) {
    JFrame frame = new JFrame("Table Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    final JTextField text = new JTextField("Editable Text");

    final TableModel model = new DefaultTableModel(new String[]{"Text"},1);
    model.setValueAt(text.getText(), 0, 0);
    text.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent actionEvent) {
        model.setValueAt(text.getText(), 0, 0);
      }
    });
    JTable table = new JTable(model);

    JPanel panel = new JPanel(new BorderLayout());
    panel.add(text, BorderLayout.NORTH);
    panel.add(new JScrollPane(table), BorderLayout.SOUTH);

    frame.setContentPane(panel);
    frame.pack();
    frame.setVisible(true);
  }
}
于 2012-06-10T13:01:54.820 に答える