在代码执行下一行之前,我如何等待帧执行操作?

时间:2016-01-29 17:35:47

标签: java

我想为用户初始化图形用户界面(GUI)以输入表单。完成此操作后,我想打开一个新的GUI,但只要第一个GUI弹出,下一个GUI就会被初始化为。

有没有办法解决这个问题而不使用等待并通知?

这是我的代码示例:

public static void main(String[] args) {
    new GUIForm(); 
    // wait until the user inputs the complete form
    new GUIWelcome();

}

这很简单,我喜欢这样做。

2 个答案:

答案 0 :(得分:3)

创建一个OnActionListener接口

public interface OnActionListener {
    public void onAction();
}

在GUIForm类中添加这些代码

private OnActionListener listener;
private JButton action;

public GUIForm(OnActionListener listener) {
    this.listener = listener;
    action = new JButton("Action");
    action.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            GUIForm.this.listener.onAction();
        }
    });
}

现在你可以实现那个

new GUIForm(new OnActionListener() {

        @Override
        public void onAction() {
            new GUIWelcome();
        }
    }); 

答案 1 :(得分:0)

您需要使用某种排序发布/订阅机制。简而言之,这就是您所需要的:

public class PubSub {

public static void main(String[] args) {
    JFrame frame1 = new JFrame("GUIForm");
    frame1.setSize(640, 480);
    JButton button = new JButton("User Input");

    JFrame frame2 = new JFrame("Welcome");
    frame2.setSize(320, 240);

    button.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseEntered(MouseEvent e) {
            button.setCursor(new Cursor(Cursor.HAND_CURSOR));
        }

        @Override
        public void mouseExited(MouseEvent e) {
            button.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        }

        @Override
        public void mouseClicked(MouseEvent e) {
            frame2.setVisible(true);
        }
    });
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame1.add(button);
    frame1.setVisible(true);

}

}

此版本使用JFrame的侦听器,但您可以实现您的on callback机制来完成相同的操作