【问题标题】:How to show record from database into TextArea in java line by line如何将数据库中的记录逐行显示到java中的TextArea中
【发布时间】:2014-09-15 07:46:57
【问题描述】:

我想将数据库中的记录逐行显示到 TextArea 中。

我试过这个:

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 是你所需要的 :)
  • 如何使用 SwingWorker?
  • 我给你的链接(javadoc)包含一些很好的例子......但我现在正在写一个答案;)
  • 好的,我正在等待答案,谢谢:)

标签: java jframe textarea record jprogressbar


【解决方案1】:

嗯,SwingWorker 的目标是在另一个线程中处理计算,从而避免在您的 Swing 应用程序中出现一些难看的冻结(查看事件调度线程)。

有几种方法可以知道:

  • doInBackground(),您的 SwingWorker 的主要部分,将进行计算
  • publish(V... chunks ),允许您在计算期间发布部分结果
  • process(List&lt;V&gt; chunks),允许您在收到部分结果时为所欲为。
  • get(),计算结束后给你最终结果。

SwingWorker&lt;V, K&gt; 中,V 是最终结果的类型,K 是块的类型。

这是一个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);
  }

}

对不起我的英语不好;)

【讨论】:

  • 我不能使用它,因为我在单击按钮时会这样做,所以我不知道如何使用此代码:(
  • 在你的项目中添加这个类,并将监听器中的代码替换为new TweetWorker(jTextField2, jTextArea1, jProgressBar1).execute()
猜你喜欢
  • 2013-01-19
  • 2017-07-29
  • 2015-07-20
  • 1970-01-01
  • 2016-09-03
  • 2014-11-15
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多