结果集并不总是显示在 JTable 中
Result Set not always being shown in the JTable
我正在 Java 中创建一个应用程序,它从 MySQL 数据库中检索一些信息,然后将其显示在屏幕上的 JTable 中。
我用来获取信息并将其放入 DefaultListModel<> 的代码如下所示。然后将 DefaultListModel<> 提供给 JTable,后者将信息显示在屏幕上。
SwingWorker<Void, Void> worker = new SwingWorker< Void, Void>() {
@Override
public Void doInBackground() {
String SQL = "SELECT * FROM AddABill";
try {
Statement stmt = GlobalVars.conn.createStatement();
ResultSet rs = stmt.executeQuery(SQL);
menuOptions.clear();
while(rs.next()){
menuOptions.addElement(rs.getString(1) + " - " + rs.getString(2));
}
rs.close();
stmt.close();
}
catch (SQLException e) {
System.out.println("An Error Was Detected! :/");
}
return null;
}
@Override
public void done(){
loadingGif.setVisible(false);
}
};
worker.execute();
我遇到的问题是有时信息会显示在屏幕上,有时却不会。由于使用的查询没有变化,我假设它与 MySQL 连接有关。
JTable 和 MenuOptions 是这样设置的
menuOptions = new DefaultListModel<>();
menuOptions.addElement("");
menuList = new JList<>(menuOptions);
menuList.setFont(new Font("Myriad Hebrew", Font.PLAIN, 32));
menuList.setBackground(Color.decode("#005952"));
menuList.setForeground(Color.decode("#BEC423"));
menuList.setSelectionBackground(Color.decode("#660033"));
menuList.setSelectionForeground(Color.decode("#FFFFFF"));
所以我想知道的问题是如何确保信息始终显示在屏幕上。显示时和不显示时的图片如下图
显示:
未显示:
最后要注意的是,为了获得要显示的信息,我必须继续重新运行代码,直到它最终显示出来。
非常感谢任何帮助。
@trashgod
@mKorbel
感谢大家的帮助,我已经通过将信息添加到 done() 函数的 table 中解决了这个问题。代码如下
SwingWorker<Void, Void> worker = new SwingWorker< Void, Void>() {
String[] billItems = null;
@Override
public Void doInBackground() {
String SQL = "SELECT * FROM AddABill";
try {
Statement stmt = GlobalVars.conn.createStatement();
ResultSet rs = stmt.executeQuery(SQL);
//Set The Cursor To Last Position
rs.last();
int totalRows = rs.getRow();
billItems = new String[totalRows];
//Set The Cursor Back To The Start
rs.beforeFirst();
while(rs.next()){
int rowNum = rs.getRow() - 1;
billItems[rowNum] = rs.getString(1) + " - " + rs.getString(2);
}
rs.close();
stmt.close();
}
catch (SQLException e) {
System.out.println("An Error Was Detected! :/");
}
return null;
}
@Override
public void done(){
menuOptions.clear();
for(int i = 0; i < billItems.length; i++){
menuOptions.addElement(billItems[i]);
}
loadingGif.setVisible(false);
}
};
谢谢,
托马斯。
我正在 Java 中创建一个应用程序,它从 MySQL 数据库中检索一些信息,然后将其显示在屏幕上的 JTable 中。
我用来获取信息并将其放入 DefaultListModel<> 的代码如下所示。然后将 DefaultListModel<> 提供给 JTable,后者将信息显示在屏幕上。
SwingWorker<Void, Void> worker = new SwingWorker< Void, Void>() {
@Override
public Void doInBackground() {
String SQL = "SELECT * FROM AddABill";
try {
Statement stmt = GlobalVars.conn.createStatement();
ResultSet rs = stmt.executeQuery(SQL);
menuOptions.clear();
while(rs.next()){
menuOptions.addElement(rs.getString(1) + " - " + rs.getString(2));
}
rs.close();
stmt.close();
}
catch (SQLException e) {
System.out.println("An Error Was Detected! :/");
}
return null;
}
@Override
public void done(){
loadingGif.setVisible(false);
}
};
worker.execute();
我遇到的问题是有时信息会显示在屏幕上,有时却不会。由于使用的查询没有变化,我假设它与 MySQL 连接有关。
JTable 和 MenuOptions 是这样设置的
menuOptions = new DefaultListModel<>();
menuOptions.addElement("");
menuList = new JList<>(menuOptions);
menuList.setFont(new Font("Myriad Hebrew", Font.PLAIN, 32));
menuList.setBackground(Color.decode("#005952"));
menuList.setForeground(Color.decode("#BEC423"));
menuList.setSelectionBackground(Color.decode("#660033"));
menuList.setSelectionForeground(Color.decode("#FFFFFF"));
所以我想知道的问题是如何确保信息始终显示在屏幕上。显示时和不显示时的图片如下图
显示:
未显示:
最后要注意的是,为了获得要显示的信息,我必须继续重新运行代码,直到它最终显示出来。
非常感谢任何帮助。
@trashgod @mKorbel
感谢大家的帮助,我已经通过将信息添加到 done() 函数的 table 中解决了这个问题。代码如下
SwingWorker<Void, Void> worker = new SwingWorker< Void, Void>() {
String[] billItems = null;
@Override
public Void doInBackground() {
String SQL = "SELECT * FROM AddABill";
try {
Statement stmt = GlobalVars.conn.createStatement();
ResultSet rs = stmt.executeQuery(SQL);
//Set The Cursor To Last Position
rs.last();
int totalRows = rs.getRow();
billItems = new String[totalRows];
//Set The Cursor Back To The Start
rs.beforeFirst();
while(rs.next()){
int rowNum = rs.getRow() - 1;
billItems[rowNum] = rs.getString(1) + " - " + rs.getString(2);
}
rs.close();
stmt.close();
}
catch (SQLException e) {
System.out.println("An Error Was Detected! :/");
}
return null;
}
@Override
public void done(){
menuOptions.clear();
for(int i = 0; i < billItems.length; i++){
menuOptions.addElement(billItems[i]);
}
loadingGif.setVisible(false);
}
};
谢谢,
托马斯。