想要在用户使用按钮之前暂停代码

时间:2018-11-27 20:26:15

标签: java user-interface jbutton

因此,我试图运行代码,打开GUI窗口,在两个按钮之间进行选择,这两个按钮设置了一个值,然后使用此值继续其余的代码。

我看过类似的问题或教程,但找不到适合我问题的解决方案。

如我所见,必须使用 JFrame ActionListener ActionEvent 才能制作带有按钮的GUI。 / p>

在main方法中编写了一个扩展JFrame并实现ActionListener的对象。

问题是,在 main方法中编写的代码会打开GUI窗口并继续运行。我只希望代码一直等到用户单击按钮然后继续。

一个子解决方案是在 actionPerformed 方法中编写我想要的代码,但是:

  • 选择按钮后,GUI窗口保持打开状态
  • actionPerformed 方法编写其余代码对我来说毫无意义。

或者编写一个while循环,直到单击一个按钮为止。必须存在一个我不知道或不了解该工作方式的更明智的解决方案。

这是代码的一部分。

@Override
     public void actionPerformed(ActionEvent e) {
        if(e.getSource() == testStringA) {
            setVariableTo = "testString_a";
            try {
                runMethodWithNewVariable(setVariableTo);
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            System.exit(0);
        } else {
            setVariableTo = "project";
            try {
                runMethodWithNewVariable(setVariableTo);
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            System.exit(0);
        }
     }

3 个答案:

答案 0 :(得分:4)

为什么不使用带有两个按钮的JOptionPane(showOptionDialog)代替JFrame,例如,“字符串A”和“项目”而不是“是”和“否”?

诸如“显示选项对话框”之类的JOptionPanes本质上是阻塞的。如果在main()方法中放置一个,则执行将“等待”用户选择对话框中的某些内容,并且该对话框将返回一个指示符,以指示在main()中继续执行之前所选择的内容。

答案 1 :(得分:3)

您基本上有两个线程在运行-主线程和GUI线程。您没有显式创建GUI线程,但是它在那里。

您可以使用多种技术来同步这两个线程。最基本的是旧的synchronizedwaitnotify。也可以使用Semaphore。在主线程中,您将创建GUI并等待直到满足条件。您将在GUI线程(即actionPerformed)中进行通知。

答案 2 :(得分:2)

在程序开始时,向用户显示模式JDialog!您可以使用JOptionPane.show()方法执行此操作,如下所示:

String[] buttonTexts = {"first","second"}; //create the button texts here

//display a modal dialog with your buttons (stops program until user selects a button)
int userDecision =  JOptionPane.showOptionDialog(null,"title","Select a button!",JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE,null,buttonTexts,buttonTexts[0]);

//check what button the user selected: stored in the userDecision
// if its the first (left to right) its 0, if its the second then the value is 1 and so on

if(userDecision == 0){
  //first button was clicked, do something
} else if(userDecision == 1) {
  //second button was clicked, do something
} else {
 //user canceled the dialog
}

//display your main JFrame now, according to user input!