5

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

这是所需功能的示例。

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,如果这可以有所作为。

4

3 回答 3

14

最简单的选择是使用JOptionPaneAPI

在此处输入图像描述

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

            }
        });
    }
}

您可以通过阅读如何制作对话框来了解更多信息

已更新反馈

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;
        }
    }
}
于 2012-11-16T00:07:23.977 回答
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;
    }
}

在此处输入图像描述

于 2012-11-16T00:17:08.907 回答
2

如果您想创建 Swing GUI,使用像 NetBeans 这样的 IDE 可以让您使用WYSIWYG gui 设计器的简单性,因此您只需将您的 GUI 元素拖放到适当的位置,然后在NetBeans的 GUI 代码周围添加您的逻辑代码输出。

它当然不是依靠“为您构建 gui”的东西,但它确实在为您建立工作基础方面做得很好。您还可以通过阅读和使用 NetBeans 为 GUI 生成的代码来学习很多关于 Swing 的知识。

我发现这是开始设计 Swing 应用程序的一个很好的加速器。

于 2012-11-15T23:57:44.523 回答