JTextPane活力

时间:2012-02-10 07:59:12

标签: swing jscrollpane jtextpane

当按下JButton时,My Swing应用程序将文本行打印到JScrollPane内的JTextPane。为了快速操作,没有问题。但是,一些JButton会调用可能需要几分钟的操作。在此期间,按钮保持灰色。

当前发生的事情是文本被“批处理”,然后在操作结束时我同时获得数百行,同时按钮变为非灰色。问题是我希望附加到JTextPane中显示的文档的文本更早出现(在附加时),而不是整个操作完成时。这将创造更好的用户体验。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

使用SwingWorker执行后台操作。

// Your button handler
public void actionPerformed(ActionEvent e) {
  (new SwingWorker<Void, String>() {
    public Void doInBackground() {
      // perform your operation
      // invoke publish("your string");
    }

    protected void process(List<String> chunks) {
      // append your string to the scroll pane
    }
  }).execute();
}

答案 1 :(得分:1)

您正在直接从AWT-Thread中调用代码来阻止每个事件。解决方案是将长时间运行的代码放在单独的Thread中。当您的代码被执行并获得结果时,您需要通知您的视图(使用观察者/可观察模式)。当您的视图得到通知时,您将更新滚动窗格内容。

您还必须验证您是否在AWT-Thread中运行(SwingUtilities.isEventDispatchThread())。如果不是,则需要使用SwingUtilities.invokeLater()在AWT-Thread中调度视图的更新,因为Swing不是线程安全的。