java - 如何在java中逐行将数据库中的记录显示到TextArea中

标签 java jframe textarea record jprogressbar

我想将数据库中的记录逐行显示到文本区域中。

我尝试过这个:

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/

相关文章:

java - 我的 html 超链接在我的 OSGI 包中不起作用

java - Spring MVC URI模板问题

java - 删除 Eclipse 上 WindowBuilder Pro JFrame 中的绿色部分

javascript - 复选框使用 Javascript 将文本插入文本区域

java - 是否可以将 jedit TextArea 转换为 java.awt.TextComponent 或 javax.swing.JTextArea?

java - Java 上的欧拉项目练习 10。 isPrime 方法在循环中不起作用

Java 泛型 - 转换泛型类时出错

java - 使用 Canvas 制作游戏菜单?

java - 根据玩家 X,Y 切换 jpanels?

javascript - 我想知道用户是否移动到新行而不按 textarea 元素中的 Enter 按钮