java - 使用 Java swing 等待事件

标签 java swing asynchronous events io

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

我想要做的是有一个函数,使程序等待,直到用户输入一串文本并按 Enter 键(这将触发我已有的事件监听器),然后将该文本字符串返回到用户。

我尝试做类似的事情:

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 的线程系统,但我以前从未使用过它,而且我在网上找不到任何关于如何使用它来解决这个问题的信息。

谢谢!

最佳答案

I'm pretty sure that I'd need to make use of java's thread system,

这不是设计 GUI 的方式。一般来说,GUI 坐在那里什么都不做。想想您的浏览器,它仅在用户生成事件时执行某些操作,例如,通过使用键盘或鼠标。

I want to do is have a function that causes the program to wait until the user enters a string of text and presses enter

如果您想提示用户输入文本,那么您可能应该使用JOptionPane。阅读 How to Make Dialogs 上的 Swing 教程举一些例子。

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

参见:How to Use Text Fields .

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

关于java - 使用 Java swing 等待事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66057058/

相关文章:

java - 在 Windows 7 64 位中设置 JMF

javascript - node.js async.maplimit() 将额外参数传递给处理函数

java - 样式文本未从 JTextPane 正确保存

asynchronous - Flutter 创建一个 Utility 类但无法调用异步函数

c# - Task.ContinueWith() 正在执行但任务状态仍然是 "Running"

java - JAXB XmlAnyElement 设置 namespace 属性

java - 何时强制执行对 UI 线程中字段的原子性或 volatile 访问?

java - 使用 ASM 查找 "implicit"变量的通用签名

java - java中大数相乘

java - Jtable 不返回最后一个单元格值