【问题标题】:Updating the contents of a JTextField so that it keeps refreshing everything?更新 JTextField 的内容以使其不断刷新所有内容?
【发布时间】:2011-09-15 14:05:48
【问题描述】:

我有这段代码可以告诉我端口是否打开(可用功能)。我在我的 GUI 程序中这样调用该函数:

String newavail = "" + available(9002) ;


JTextField tf1 = new JTextField("Is Port 9002(GWT Pet Store) available? \n" + newavail);

但是,如果我在运行的 GUI 之外关闭端口,它不会立即反映此更改。我读到您可以使用 revalidate() 命令,但是您如何使用它呢?

【问题讨论】:

  • 你的主要问题不是 Swing;当端口 9002 的可用性发生变化时,您必须找到一种方法来获得通知;您可能必须创建一个 Thread 来定期检查该端口的可用性,然后在可用性发生变化时更新 GUI(使用 SwingUtilities.invokeLater())。
  • @jfp - 非常感谢,这是一个非常有用的评论

标签: java swing user-interface concurrency


【解决方案1】:

假设端口在 Event Dispatch Thread 之外关闭,您应该使用SwingUtilities 设置JTextField 实例的文本以反映可用性状态的变化。


// we're outside the EDT
SwingUtilities.invokeLater(new Runnable(){
    @Override
    public void run(){
        // modify Swing component here
    }
});

【讨论】:

  • 这很有趣——所以有一个单独的 SwingUtilities 类,这很酷。我已经解决了,谢谢,
  • @Adel,特别是使用SwingUtilities.invokeLater(...)。查看编辑!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 2016-08-09
  • 2020-07-28
相关资源
最近更新 更多