I never had to write GUI in java. This time I can also skip it and use args
as UI (user interface).
But I wonder if there is a simple way to create a small GUI to let the user select one of the options.
In other words, to implement the askUser()
function where user can select from a drop-down menu and press "ok".
I spend some time learning this topic, but not even sure that I know which type of GUI i need for this task. JFrame? JPanel? Jmenu? Thanks.
Here is an example of the desired function.
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;
}
}
Update: I use Netbeans, if this can make difference.
The simplest option would be to use the 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;
}
}
});
}
}
You can find out more by having a read through How to Make Dialogs
UPDATED with feedback
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;
}
}
}
If you want to create a Swing GUI, using an IDE like NetBeans gives you the simplicity of using a WYSIWYG gui designer, so you can just drag and drop your GUI elements into place, and then add your logic code around the GUI code that NetBeans outputs.
It certainly isn't something to rely on to "build the gui for you", but it does do a great job of setting up the foundation for you to work with. You can also learn a lot about Swing just by reading through and working with the code that NetBeans generates for the GUI.
I find this a great accelerator in getting started designing Swing apps.
After asking I found this solution. To make it simpler, the askUser()
returns 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;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With