创建Java对话框

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

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

它看起来应该类似于:

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

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

如果您需要使用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(); } } 

这应该让你去。

 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(); } // ... } 

结果:

在此处输入图像描述

您将需要使用JDialog。 使用JOptoinPane毫无疑问 – 它不仅仅意味着收集的不仅仅是一个简单的字符串。 此外,使用MigLayout , TableLayout或JGoodies表单 – 它将帮助您获得易于编码的漂亮布局。

如果允许使用GUI构建器,我会向您推荐IntelliJ IDEA

您可以在大约5到10分钟内创建类似的东西。

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

不应该那么难。

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

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