简单的弹出式Java表单,至少包含两个字段

nun*_*nos 15 java user-interface swing

当用户单击一个按钮时,我想显示一个应该至少有两个JTextField和两个JLabel的弹出窗体,因此JOptionPane.showInputDialog不可能使用.

tra*_*god 40

你应该至少考虑一种JOptionPane方法,如showInputDialog()showMessageDialog().

附录:使用的选择JOptionPane更多地取决于模态的适用性,而不是所示组件的数量.另请参见如何制作对话框.

附录:如@camickr的评论中所述,您可以使用此处引用的Dialog Focus中讨论的方法将焦点设置为特定组件.

图片

package gui;

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.*;

/** @see https://stackoverflow.com/a/3002830/230513 */
class JOptionPaneTest {

    private static void display() {
        String[] items = {"One", "Two", "Three", "Four", "Five"};
        JComboBox<String> combo = new JComboBox<>(items);
        JTextField field1 = new JTextField("1234.56");
        JTextField field2 = new JTextField("9876.54");
        JPanel panel = new JPanel(new GridLayout(0, 1));
        panel.add(combo);
        panel.add(new JLabel("Field 1:"));
        panel.add(field1);
        panel.add(new JLabel("Field 2:"));
        panel.add(field2);
        int result = JOptionPane.showConfirmDialog(null, panel, "Test",
            JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
        if (result == JOptionPane.OK_OPTION) {
            System.out.println(combo.getSelectedItem()
                + " " + field1.getText()
                + " " + field2.getText());
        } else {
            System.out.println("Cancelled");
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                display();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1,用于显示如何使用选项窗格以及包含教程的链接.以这种方式使用面板存在一个问题.焦点将出现在按钮上,而不是文本字段,这可能是一个问题.有关此解决方案,请查看"Dialog Focus"链接:http://tips4java.wordpress.com/2010/03/14/dialog-focus/ (3认同)