gpt4 book ai didi

java - 在 Swing 中按下按钮之前阻止流程继续进行

转载 作者:行者123 更新时间:2023-12-01 13:33:29 36 4
gpt4 key购买 nike

我想创建一个简单的 Swing 表单来接收用户的输入。棘手的部分是我希望表单的构造函数停止程序流程,直到用户点击按钮。例如:

public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hello, please enter your name");
String name = new Input().getText();
JOptionPane.showMessageDialog(null, "Hello " + name);
}

我希望流程在调用 getText() 方法之前在 Input 的构造函数内停止,直到用户点击构造函数生成的 Swing 表单上调用 ActionListener 的按钮为止。

这是输入代码:

import java.awt.BorderLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class Input extends JFrame{
private static final long serialVersionUID = 1L;

private String text;
private JPanel panel;
private JTextArea textArea;
private JButton button;

public Input(){
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
panel = new JPanel();
panel.setLayout(new BorderLayout(3,3));
textArea = new JTextArea(5,10);
button = new JButton("submit");
button.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
setText(textArea.getText());

}
});
panel.add(textArea, BorderLayout.CENTER);
panel.add(button, BorderLayout.PAGE_END);
textArea.setSize(1500, 1500);
add(panel);
pack();
setVisible(true);
}

public synchronized String getText() {
while(text==null)
try {
this.wait();
} catch (InterruptedException e) {}
try {

return text;
} finally {
dispose();
}
}

public synchronized void setText(String text) {
this.text = text;
notifyAll();
}

}

我的感觉是,构造函数需要做的是以某种方式获取主程序正在运行的线程的锁,并且仅在从 ActionListener 调用 setText() 方法时释放它,但是我不知道该怎么做。

非常感谢!!!

最佳答案

您可以尝试在ActionListener中进行进一步处理:

@Override
public void actionPerformed(ActionEvent arg0) {
String name = textArea.getText();
// ans so on, and then:
JOptionPane.showMessageDialog(null, "Hello " + name);
}

关于java - 在 Swing 中按下按钮之前阻止流程继续进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21423642/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com