我是Java Swing的新手。我有两个Java文件。一个是main()
,另一个是GUI文件。
客户
class Client
{
GUI gui;
public static void main(String args[])
{
//.......... do something.......
gui = new GUI();
// at thin point I want to have value of gui.s1 ....
//but main() actually do not wait for the user input.
}
}
GUI
class GUI extends JFrame implements ActionListener
{
String s1="";
GUI()
{
JTextField t1= new JTextField(20);
JButton j1= new JButton("submit");
j1.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
s1=t1.getText();
}
}
请指导我,如果这不是一个合适的问题,请给我推荐你认为我应该读的文章,以获得概念。
现在我在打电话,所以我不能帮你写代码,我会试着让你理解这个概念:用户输入、按钮点击是5秒后可能发生的事情,就像30分钟后可能发生一样。所以,是的,有时你可以让sleep为主,并希望输入,等到.s1得到一个值等等。
但是,我不认为在这里做这件事是正确的。可以使用的最好的方法是当用户单击按钮时调用回调。它是使用接口完成的。
首先,您声明一个可能名为OnRequestClick
的接口,在其中实现onRequestClick(String message);
方法。
消息将是s1的文本。
现在,在GUI类中创建一个名为listener的OnRequestClick类型的新字段,并将其放入构造函数中。
现在,在您创建GUI对象的地方,编译器要求您为OnRequestClick提供一个代码,这样做,它将是用户按下tbe按钮时执行的代码。
好吧,现在我说的是假的:它不会被解雇,因为我们没有给听众打过任何电话
因此,在您的操作Performed中添加listener.onRequestClick(s1.getText());所以在你的主页上,你会得到ebemt和文本。
用JOptionPane.showInputDialog(..)
替换GUI
,不仅代码会短得多,而且问题也会得到解决。例如
import javax.swing.*;
class UserInput {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
String name = JOptionPane.showInputDialog(null, "Name?");
if (name==null) {
System.out.println("Please input a name!");
} else {
System.out.println("Name: " + name);
}
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency
SwingUtilities.invokeLater(r);
}
}
您可以使用回调机制。
我已经在单独的类中发布了JFrame的示例代码,ActionListener呢?。请看一看。
interface Callback {
void execute(String value);
}
abstract class GUI extends JFrame implements ActionListener, Callback{
...
// do not provide the implementation of `execute` method here
...
public void actionPerformed(ActionEvent e) {
s1 = t1.getText();
// now callback method is called
execute(s1);
}
}
你的主要课程看起来像:
public static void main(String args[]) {
gui = new GUI() {
@Override
public void execute(String value) {
System.out.println("Entered value:" + value);
}
};
}