首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTable和DefaultTableModel

JTable和DefaultTableModel
EN

Stack Overflow用户
提问于 2012-07-08 18:55:51
回答 1查看 1.7K关注 0票数 4

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

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

代码语言:javascript
复制
private String sql = "select * from profildb.tbl_detailed";  //to
private String sql = "select * from profildb.tbl_detailed where Y.."; //this

此操作将在我的Button action Listener中处理;

代码语言:javascript
复制
    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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-08 19:05:50

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)的区别是

  • Table from Database (ResultsetTableModel)调用EDT上的所有更新,然后图形用户界面等待所有事件完成,从数据库加载数据时图形用户界面不负责任或freeze
  • Runnable#Thread(SwingWorker)所有更新来自后台任务,图形用户界面负责鼠标和键盘事件,
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11382572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档