创建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提供的解决方案。