java - JTable 和 DefaultTableModel

标签 java mysql swing jtable defaulttablemodel

我有一个从本地 MySQL 服务器获取信息的表。它可以很好地读取数据并将其发布到 GUI 上。

我的问题是,当我更改表格命令时如何刷新我的表格,例如:

private String sql = "select * from profildb.tbl_detailed";  //to
private String sql = "select * from profildb.tbl_detailed where Y.."; //this

这个 Action 将在我的按钮 Action 监听器中处理;

    JButton btnOK = new JButton("");
    btnOK.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            if( (tfBirinci.getText().isEmpty() || tfBirinci.getText() == null) && (tfIkinci.getText().isEmpty() || tfIkinci.getText() == null ))
            {
                taLog.setText("Database alani bos birakilamaz...\n");
            }
            else if ( (!(tfBirinci.getText().isEmpty() )) && (tfIkinci.getText().isEmpty() || tfIkinci.getText() == null ) )
            {
                sql = ("SELECT * FROM " + tfBirinci.getText());
                taLog.setText("Komut elde edildi : " + sql + "\n");
                System.out.println("aaaa " + tfBirinci.getText());
                //anaFrame.dispose();
                //databaseHistoryCalistir(); doesnt work
            }
            else if ( ( !(tfBirinci.getText().isEmpty() ) &&  !(tfBirinci.getText() == null) )  && ( !(tfIkinci.getText().isEmpty() ) && !(tfBirinci.getText() == null) ) )
            {
                sql = ("SELECT * FROM " + tfBirinci.getText() + " WHERE " + tfIkinci.getText());
                taLog.setText("Komut elde edildi : " + sql + "\n" );
                System.out.println("bbbb " + tfBirinci.getText());
                //anaFrame.dispose();
                //databaseHistoryCalistir(); doesnt work
            }else 
                taLog.setText("Lütfen Database alanini doldurunuz, aksi taktirde komut elde edilemez...\n");
        }
    });

那么,当我更改字符串的语句时,我需要实现什么来只更新表?

提前致谢。 (如果能举个关于 DefaultTableModel 的例子就太棒了)

编辑,你可以在这里看到我的完整代码:http://pastebin.com/eQCJVuKn

最佳答案

1) 使用 Table from Database by @camickr

2) 使用ResultsetTableModel

之一

3) 从Runnable#Thread调用SQL语句,但输出到XxxTableModel必须在invokeLater中,更多在Concurency in Swing中关于 Event Dispatch Thread (EDT)

4) 从SwingWorker调用SQL语句,然后 progress()publish()done() 的输出应该在 EDT

5) DefaultTableModel 不需要覆盖方法 fireXxxTableXxx,所有方法都已正确实现

6) 逻辑Table from Database (ResultsetTableModel)Runnable#Thread(SwingWorker) 之间的区别是

  • 数据库中的表 (ResultsetTableModel) 在 EDT 上调用所有更新,然后 GUI 等待所有事件完成,在从数据库加载数据期间 GUI 不负责任或卡住

    <
  • Runnable#Thread(SwingWorker) 所有更新都来自后台任务,GUI 负责鼠标和键盘事件,

关于java - JTable 和 DefaultTableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11382572/

相关文章:

java - 如何在模型 View 呈现器模式中使用存储库模式和交互器模式?

java - 不能用Eclipse做StringBuilder

mysql - count(*) over() MSSQL 到 Mysql

Java Swing : Extended jpanel class will not brighten upon repainting.

java - 更改另一个类的 JLabel 文本

java - 可视化构建 swing UI 的最佳工具

java - 查找数组中最大元素的索引

java - 如何在 Robotium for Android Studio 中测试 AlertDialog 项目单击

mysql - 比较 Drupal 中的 2 个字段

python - 基于投票的用户之间的相似性