具有至少两个字段的简单弹出式Java表单

2022-09-03 03:59:29

当用户单击按钮时,我想显示一个弹出窗口,该表单应至少具有两个JTextFields和两个JLabels,因此不可能使用。JOptionPane.showInputDialog


答案 1

您至少应该考虑 JOptionPane 方法之一,例如 或 。showInputDialog()showMessageDialog()

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

附录:正如@camickr在注释中指出的那样,您可以使用此处引用的对话框焦点中讨论的方法将焦点设置为特定组件。

image

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

答案 2

使用小型 UiBooster 库,您可以在几行代码中构建表单对话框。

FilledForm form = new UiBooster()
        .createForm("Personal informations")
        .addText("Whats your first name?")
        .addTextArea("Tell me something about you")
        .addSelection(
                "Whats your favorite movie?",
                Arrays.asList("Pulp Fiction", "Bambi", "The Godfather", "Hangover"))
        .show();

enter image description here


推荐