有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

创建Java对话框的用户界面

创建对话框的最简单方法是什么:

  • 在一个窗口中,我给出了信封地址的数据,还从大小列表中设置了字体类型
  • 单击“确定”后,在同一窗口或下一窗口中,我可以预览信封在给定名称下的外观,并使用选定的字体大小

它应该类似于:

alt text http://img15.imageshack.us/img15/7355/lab10aa.gif

我应该使用Jdialog吗?或者JOptionPane就足够了?下一步将是选择字体和背景的颜色,所以我必须记住这一点


共 (5) 个答案

  1. # 1 楼答案

    您将需要使用JDialog。在JOptoinPane上乱搞毫无意义——它不仅仅是为了收集一个简单的字符串。此外,使用MigLayoutTableLayoutJGoodies forms-这将帮助您获得易于编码的良好布局

  2. # 2 楼答案

    您可以使用JOptionPane。您可以向其中添加任何Swing组件

    创建一个包含除按钮外所需的所有组件的面板,然后将该面板添加到选项窗格中。这种方法唯一的问题是,默认情况下,焦点将集中在按钮上。要解决此问题,请参见Dialog Focus提供的解决方案

  3. # 3 楼答案

    如果允许使用GUI生成器,我建议您IntelliJ IDEA's

    你可以在5-10分钟内创建类似的东西

    如果这是不可能的(也许你想练习学习或其他东西),我会使用JFrame)和CardLayout

    应该没那么难做

  4. # 4 楼答案

    这会让你走的

    class TestDialog extends JDialog {
    
        private JButton okButton = new JButton(new AbstractAction("ok") {
            public void actionPerformed(ActionEvent e) {
                System.err.println("User clicked ok");
                // SHOW THE PREVIEW...
                setVisible(false);
            }
        });
        private JButton cancelButton = new JButton(new AbstractAction("cancel") {
            public void actionPerformed(ActionEvent e) {
                System.err.println("User clicked cancel");
                setVisible(false);
            }
        });
    
        private JTextField nameField = new JTextField(20);
        private JTextField surnameField = new JTextField();
        private JTextField addr1Field = new JTextField();
        private JTextField addr2Field = new JTextField();
        private JComboBox sizes = new JComboBox(new String[] { "small", "large" });
    
        public TestDialog(JFrame frame, boolean modal, String myMessage) {
            super(frame, "Envelope addressing", modal);
    
            JPanel mainPanel = new JPanel();
            mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
            getContentPane().add(mainPanel);
    
            JPanel addrPanel = new JPanel(new GridLayout(0, 1));
            addrPanel.setBorder(BorderFactory.createTitledBorder("Receiver"));
            addrPanel.add(new JLabel("Name"));
            addrPanel.add(nameField);
            addrPanel.add(new JLabel("Surname"));
            addrPanel.add(surnameField);
            addrPanel.add(new JLabel("Address 1"));
            addrPanel.add(addr1Field);
            addrPanel.add(new JLabel("Address 2"));
            addrPanel.add(addr2Field);
            mainPanel.add(addrPanel);
    
            mainPanel.add(new JLabel(" "));
    
            mainPanel.add(sizes);
            JPanel buttons = new JPanel(new FlowLayout());
            buttons.add(okButton);
            buttons.add(cancelButton);
    
            mainPanel.add(buttons);
    
            pack();
            setLocationRelativeTo(frame);
            setVisible(true);
        }
    
    
        public String getAddr1() {
            return addr1Field.getText();
        }
    
        // ...
    }
    

    结果:

    enter image description here

  5. # 5 楼答案

    如果需要使用JOptionPane:

    import java.awt.*;
    import javax.swing.*;
    
    public class Main extends JFrame {
    
        private static JTextField nameField = new JTextField(20);
        private static JTextField surnameField = new JTextField();
        private static JTextField addr1Field = new JTextField();
        private static JTextField addr2Field = new JTextField();
        private static JComboBox sizes = new JComboBox(new String[] { "small", "medium", "large", "extra-large" });
    
        public Main(){
            JPanel mainPanel = new JPanel();
            mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
            getContentPane().add(mainPanel);
    
            JPanel addrPanel = new JPanel(new GridLayout(0, 1));
            addrPanel.setBorder(BorderFactory.createTitledBorder("Receiver"));
            addrPanel.add(new JLabel("Name"));
            addrPanel.add(nameField);
            addrPanel.add(new JLabel("Surname"));
            addrPanel.add(surnameField);
            addrPanel.add(new JLabel("Address 1"));
            addrPanel.add(addr1Field);
            addrPanel.add(new JLabel("Address 2"));
            addrPanel.add(addr2Field);
            mainPanel.add(addrPanel);
            mainPanel.add(new JLabel(" "));
            mainPanel.add(sizes);
    
            String[] buttons = { "OK", "Cancel"};
    
            int c = JOptionPane.showOptionDialog(
                    null,
                    mainPanel,
                    "My Panel",
                    JOptionPane.DEFAULT_OPTION,
                    JOptionPane.PLAIN_MESSAGE,
                    null,
                    buttons,
                    buttons[0]
             );
    
            if(c ==0){
                new Envelope(nameField.getText(), surnameField.getText(), addr1Field.getText()
                        , addr2Field.getText(), sizes.getSelectedIndex());
            }
    
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }
    
        public static void main(String[] args) {
            new Main();
        }
    }