如何暂停具有main()的程序,直到按下GUI中的按钮



我是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);
        }
    };
}

相关内容

  • 没有找到相关文章