我想将数据库中的记录逐行显示到文本区域中。
我尝试过这个:
String sql = "SELECT COUNT(*) FROM tweet";
ResultSet rs=stmt.executeQuery(sql);
int row = 0;
while(rs.next()){
row = rs.getInt("COUNT(*)");
}
jTextField2.setText("" + row);
jProgressBar1.setMaximum(row);
jProgressBar1.setStringPainted(true);
for(int i=1;i<row;i++){
String sql1 = "SELECT tweet,date,location FROM tweet WHERE tweet_id='"+i+"'";
ResultSet rs2 = stmt.executeQuery(sql1);
String tweet = "";
String date = "";
String location = "";
while(rs2.next()){
tweet = rs2.getString("tweet");
date = rs2.getString("date");
location = rs2.getString("location");
}
jTextArea1.append(i + ") " + tweet + "\n" );
jProgressBar1.setValue(i);
number++;
}
但是一旦所有过程完成,它就会给我输出,帮助我。我想逐行显示输出执行而不是全部显示。以及如何使用进度条?
最佳答案
嗯,SwingWorker
的目标是在另一个线程中处理计算,因此可以避免 swing 应用程序中出现一些难看的卡住(查看事件调度线程)。
有几种方法需要了解:
-
doInBackground()
,SwingWorker 的主要部分,将进行计算 -
publish(V... chunks )
,允许您在计算过程中发布部分结果 -
process(List<V> chunks)
,允许您在收到结果的某些部分时做任何您想做的事情。 -
get()
,计算结束后给出最终结果。
在 SwingWorker<V, K>
, V
是最终结果的类型,K
block 的类型。
这是一个SwingWorker
这应该适合你,希望它有帮助:)
public class TweetWorker extends SwingWorker<Integer, String> {
private JTextField field;
private JTextArea area;
private JProgressBar bar;
private int progress = 0 ;
public TweetWorker(JTextField yourField, JTextArea yourArea, JProgressBar yourBar) {
field = yourField;
area = yourArea;
bar = yourBar;
}
@Override
public Integer doInBackground() {
String sql = "SELECT COUNT(*) FROM tweet";
ResultSet rs=stmt.executeQuery(sql);
int row = 0;
while(rs.next()){
row = rs.getInt("COUNT(*)");
}
field.setText("" + row);
bar.setMaximum(row);
bar.setStringPainted(true);
for(int i=1;i<row;i++){
String sql1 = "SELECT tweet,date,location FROM tweet WHERE tweet_id='"+i+"'";
ResultSet rs2 = stmt.executeQuery(sql1);
String tweet = "";
String date = "";
String location = "";
while(rs2.next()){
tweet = rs2.getString("tweet");
date = rs2.getString("date");
location = rs2.getString("location");
}
publish(i + ") " + tweet + "\n");
}
return row;
}
@Override
public void process(List<String> chunks){
for(String s : chunks) {
area.append(s);
}
progress+=chunks.size();
bar.setValue(progress);
}
}
抱歉我的英语不好;)
关于java - 如何在java中逐行将数据库中的记录显示到TextArea中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25843064/