我有一个从本地 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/