我想为用户初始化图形用户界面(GUI)以输入表单。完成此操作后,我想打开一个新的GUI,但只要第一个GUI弹出,下一个GUI就会被初始化为。
有没有办法解决这个问题而不使用等待并通知?
这是我的代码示例:
public static void main(String[] args) {
new GUIForm();
// wait until the user inputs the complete form
new GUIWelcome();
}
这很简单,我喜欢这样做。
答案 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机制来完成相同的操作