首页 > 解决方案 > Java:如何等待监听器执行下一行?

问题描述

我有一个问题,因为我的主类中有下一个代码:

SelectCalculatorWindow selectCalculatorWindow = new SelectCalculatorWindow();
CalcWindow calcWindow;

if (selectCalculatorWindow.getOption() == SelectCalculatorWindow.BASIC_OPTION) {
    calcWindow = new CalcWindow(0);
} else if (selectCalculatorWindow.getOption() == SelectCalculatorWindow.PSEUDOSCIENTIFIC_OPTION) {
    calcWindow = new CalcWindow(1);
}

而且,在其他类(SelectCalculatorWindow)中,我有这个:

public SelectCalculatorWindow() {
    initComponents();
    instantiateListener();
}

private void instantiateListener() {
    acceptBtn.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if(basicCalculatorRbtn.isSelected()) {
                setOption(BASIC_OPTION);
            } else if (pseudoscientificCalculatorRbtn.isSelected()) {
                setOption(PSEUDOSCIENTIFIC_OPTION);
            }
            setVisible(false);
        }
    });
}

所以,我希望我在主类中编写的条件语句仅在用户单击按钮时执行,我不知道该怎么做

标签: javaswingactionlistener

解决方案


您尚未发布有效的最小可重现示例程序,所以我只能猜测,但话虽如此,我的猜测是SelectCalculatorWindow创建并显示一个 JFrame,它是一个非模态应用程序窗口,这不是您想要的。相反,您将希望显示模态子窗口或对话框,例如模态 JDialog。当您使用它时,它会暂停调用代码中的应用程序代码流,直到处理完对话框,因此允许您的程序暂停等待用户做出选择,然后在做出选择后恢复代码。

JOptionPane 是一种模式对话框的示例,但使用 JDialog,您可以创建像 JFrame 一样多样和灵活的窗口,但具有上述优点。


推荐阅读