我从来没有在java中编写GUI。这次我也可以跳过它并使用args
作为UI(用户界面)。
但我想知道是否有一种简单的方法可以创建一个小的GUI来让用户选择其中一个选项。
换句话说,要实现askUser()
功能,用户可以从下拉菜单中选择并按“确定”。
我花了一些时间学习这个主题,但甚至不确定我知道这个任务需要哪种类型的GUI。 JFrame的? JPanel的? JMenu的?感谢。
以下是所需功能的示例。
package trygui;
public class Main {
public static void main(String[] args) {
String[] choices = new String[]{"cats", "dogs"};
int choice = askUser(choices);
System.out.println("selected: " + choices[choice]);
}
static int askUser(String[] choices) {
// create pop-up dialog
return 0;
}
}
更新:我使用Netbeans,如果这会有所不同。
答案 0 :(得分:13)
最简单的选择是使用JOptionPane
API
public class TestOptionPane03 {
public static void main(String[] args) {
new TestOptionPane03();
}
public TestOptionPane03() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JPanel panel = new JPanel();
panel.add(new JLabel("Please make a selection:"));
DefaultComboBoxModel model = new DefaultComboBoxModel();
model.addElement("Chocolate");
model.addElement("Strewberry");
model.addElement("Vanilla");
JComboBox comboBox = new JComboBox(model);
panel.add(comboBox);
int result = JOptionPane.showConfirmDialog(null, panel, "Flavor", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
switch (result) {
case JOptionPane.OK_OPTION:
System.out.println("You selected " + comboBox.getSelectedItem());
break;
}
}
});
}
}
您可以通过阅读How to Make Dialogs
了解更多信息更新了反馈
public class TestOptionPane03 {
public static void main(String[] args) {
String choice = ask("Chocolate", "Strewberry", "Vanilla");
System.out.println("You choose " + choice);
}
public static String ask(final String... values) {
String result = null;
if (EventQueue.isDispatchThread()) {
JPanel panel = new JPanel();
panel.add(new JLabel("Please make a selection:"));
DefaultComboBoxModel model = new DefaultComboBoxModel();
for (String value : values) {
model.addElement(value);
}
JComboBox comboBox = new JComboBox(model);
panel.add(comboBox);
int iResult = JOptionPane.showConfirmDialog(null, panel, "Flavor", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
switch (iResult) {
case JOptionPane.OK_OPTION:
result = (String) comboBox.getSelectedItem();
break;
}
} else {
Response response = new Response(values);
try {
SwingUtilities.invokeAndWait(response);
result = response.getResponse();
} catch (InterruptedException | InvocationTargetException ex) {
ex.printStackTrace();
}
}
return result;
}
public static class Response implements Runnable {
private String[] values;
private String response;
public Response(String... values) {
this.values = values;
}
@Override
public void run() {
response = ask(values);
}
public String getResponse() {
return response;
}
}
}
答案 1 :(得分:2)
如果要创建Swing GUI,使用像NetBeans这样的IDE可以简单地使用WYSIWYG gui designer,这样您就可以将GUI元素拖放到位,然后添加逻辑代码NetBeans输出的GUI代码。
当然不能依靠“为你建造gui”,但它确实为你的工作奠定了基础。您还可以通过阅读并使用NetBeans为GUI生成的代码来学习很多关于Swing的知识。
我发现这是开始设计Swing应用程序的一个很好的加速器。
答案 2 :(得分:2)
在询问后我找到了这个解决方案。为简化起见,askUser()
会返回String
。
package trygui;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
String[] choices = new String[]{"cats", "dogs"};
String choice = askUser(choices);
System.out.println("selected: " + choice);
}
static String askUser(String[] choices) {
String s = (String) JOptionPane.showInputDialog(
null,
"make your choice",
"Try GUI",
JOptionPane.PLAIN_MESSAGE,
null,
choices,
choices[0]);
return s;
}
}