在Swing中从MenuItem打开一个对话框,并在关闭之前验证该对话框

问题描述

我对Java和Swing中的UI开发有些陌生。当我单击JMenuBar中的一个项目,然后在关闭对话框之前验证该对话框时,我想打开一个对话框(因此,除非用户输入满足特定条件,否则按X或ok按钮将不起作用)。

此刻,我的项目的结构如下:

Window.java

import javax.swing.*;

public class DialogPanel extends JPanel {
    private JTextField id_field = new JTextField(20);

    public DialogPanel() {
        add(new JLabel("Insert something to validate here:"));
        add(id_field);
    }
}

以及 DialogPanel.java

中对话框的内容
Convert.ToDateTime(value,CultureInfo.GetCultureInfo("de-DE"))
       .ToString(CultureInfo.InvariantCulture)

现在显然这还没有进行任何对话框验证。我一直在努力使它发挥作用,但我发现a working example of dialog validation,但似乎无法将其集成/使整个过程正常运行。 如果我从链接获取示例,该如何调用对话框?我认为我不应该使用JOptionPane,但是每次我尝试以其他任何方式显示jdialog时,都会收到“无法共享Boxlayout”错误。 请帮助我将其集成到我的代码中。

解决方法

首先,您需要在DialogPanel类中添加吸气剂。如果您想验证在idField中键入的信息,则必须通过在ActionListener上放置JtextField来向此类添加代码。

public class DialogPanel extends JPanel {
    private static final long serialVersionUID = 1L;
    
    private JTextField idField = new JTextField(20);

    public DialogPanel() {
        add(new JLabel("Insert something to validate here:"));
        add(idField);
    }

    public JTextField getIdField() {
        return idField;
    }
    
    public String getIdFieldString() {
        return idField.getText();
    }
}

然后,您的结果将如下所示。

static class Open_Dialog implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        DialogPanel dialog = new DialogPanel();
        int result = JOptionPane.showConfirmDialog(null,dialog,"Test",JOptionPane.OK_CANCEL_OPTION);
        if (result == JOptionPane.OK_OPTION) {
            String string = dialog.getIdFieldString();
            // Do your processing
        }
    }
}