因此,我试图运行代码,打开GUI窗口,在两个按钮之间进行选择,这两个按钮设置了一个值,然后使用此值继续其余的代码。
我看过类似的问题或教程,但找不到适合我问题的解决方案。
如我所见,必须使用 JFrame , ActionListener 和 ActionEvent 才能制作带有按钮的GUI。 / p>
在main方法中编写了一个扩展JFrame并实现ActionListener的对象。
问题是,在 main方法中编写的代码会打开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);
}
}
答案 0 :(得分:4)
为什么不使用带有两个按钮的JOptionPane(showOptionDialog)代替JFrame,例如,“字符串A”和“项目”而不是“是”和“否”?
诸如“显示选项对话框”之类的JOptionPanes本质上是阻塞的。如果在main()方法中放置一个,则执行将“等待”用户选择对话框中的某些内容,并且该对话框将返回一个指示符,以指示在main()中继续执行之前所选择的内容。
答案 1 :(得分:3)
您基本上有两个线程在运行-主线程和GUI线程。您没有显式创建GUI线程,但是它在那里。
您可以使用多种技术来同步这两个线程。最基本的是旧的synchronized
,wait
和notify
。也可以使用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!