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

时间:2012-11-15 23:46:08

标签: java swing popup jcombobox joptionpane

我从来没有在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,如果这会有所不同。

3 个答案:

答案 0 :(得分:13)

最简单的选择是使用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;
        }
    }
}

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

enter image description here