繁体   English   中英

用 Java swing 等待一个事件

[英]Waiting for an event with Java swing

我有一个名为“Text”的 Java class ,它使用 swing 创建 2 个文本框。 其中有一个侦听器将文本从第一个框复制到第二个框的末尾。 到目前为止,我已经将它设置为其他类可以调用 function 到 output 文本到第二个框的位置。

我想要做的是有一个 function 导致程序等到用户输入一个文本字符串并按下回车键(这将触发我已经拥有的事件侦听器),然后将该文本字符串返回给用户。

我尝试做类似的事情:

String lastInput;
boolean waiting;

    public void actionPerformed(ActionEvent evt) {
        String text = textField.getText();
        println(text);
        lastInput = text;
        waiting = false;
        parse(text);
        textField.selectAll();
    }

    public String get() {
        waiting = true;
        while(waiting){}
        return lastInput;
    }

但这只会导致程序冻结而不注册任何输入(包括在文本框中输入的任何内容)。 我很确定我需要使用 java 的线程系统,但我以前从未使用过它,而且我在网上找不到任何关于如何使用它来解决这个问题的信息。

谢谢!

我很确定我需要使用java的线程系统,

这不是您设计 GUI 的方式。 通常,GUI 坐在那里什么都不做。 想想你的浏览器,它只在用户生成事件时才做一些事情,例如,通过使用键盘或鼠标。

我想做的是有一个 function 导致程序等到用户输入一串文本并按回车键

如果您想提示用户输入文本,那么您可能应该使用JOptionPane 阅读有关如何制作对话框的 Swing 教程以获取一些示例。

如果您确实遇到需要在表单的文本字段中输入文本时进行处理的情况,那么您可以在文本字段中添加一个ActionListener

请参阅: 如何使用文本字段

当在文本字段上按下Enter时, TextDemo示例会将文本从文本字段复制到文本区域。

首先,这里的主要问题是while循环,它是一个无限循环。 如果使用单线程,那么一旦执行循环,就没有可以调用“actionPerformed”方法的空闲上下文。

主要问题是具有不同的上下文:一个将执行“get”方法,一个将在触发器调用后执行“actionPerformed”。

还有两件事:

  1. 您的“获取” function 名称不好,可能会造成混淆。 Get 用于 getter(访问类的成员)。
  2. 使用线程安全等待 boolean (AtomicBoolean 或其他东西)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM