java - 简单的 Java GUI 作为弹出窗口和下拉菜单

标签 java swing popup jcombobox joptionpane

我从来不用用 java 编写 GUI。这次我也可以跳过它,使用 args 作为 UI(用户界面)。 但我想知道是否有一种简单的方法可以创建一个小型 GUI 来让用户选择其中一个选项。 换句话说,实现 askUser() 函数,用户可以从下拉菜单中进行选择,然后按“确定”。 我花了一些时间学习这个主题,但我什至不确定我是否知道我需要哪种类型的 GUI 来完成这项任务。框架? J面板?菜单?谢谢。

这是所需功能的示例。

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,如果这能有所作为的话。

最佳答案

最简单的选择是使用 JOptionPane API

enter image description here

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;
        }
    }
}

关于java - 简单的 Java GUI 作为弹出窗口和下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13408238/

相关文章:

Java代码需要限制用户输入

javascript - 选择表格单元格并通过弹出窗口更新该特定单元格

javascript - 像弹出窗口一样的灯箱

java - JCombobox 的圆形弹出窗口

java - GXT GridInlineEditing 字段验证

java - 如何在 JFrame 中正确居中 JPanel ( FIXED SIZE )?

java rmi : access control exception, 访问被拒绝

java - 在Java Applet中使用计时器作为秒表进行计数

java - 使用 JAXB 对集合进行解码

java - 扫描仪类和 InputMismatchException