没有默认按钮的 JDialog

JDialog without default buttons

我正在像这样打开一个 JDialog:

    public JPanel buildAddFrame(){
        JFrame frame = new JFrame();
        JPanel contentPanel = (JPanel) frame.getContentPane();
        contentPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
        contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));

        JPanel topButtonBar = new JPanel();
        topButtonBar.setLayout(new BoxLayout(topButtonBar, BoxLayout.X_AXIS));

        JTextField text = new JTextField("Hello there.");
        topButtonBar.add(text);

        contentPanel.add(topButtonBar);

        return contentPanel;
    }

    public void buttonPressed(){
        JOptionPane addDialog = new JOptionPane(buildAddFrame());
        JDialog dialog = addDialog.createDialog(this, "Test dialog");
        dialog.setVisible(true);
        System.out.println("dialog closed.");
    }

因此,当有人在我的主窗体上按下按钮时,会弹出对话框并要求在各种控件中输入(现在只有一个文本字段才能启动)。不过我在两件事上遇到了麻烦:

1: 底部有一个 "OK" 按钮,用户可以单击该按钮关闭对话框,但我不想要这个。我想制作自己的按钮并定位它们和其他东西,那么有没有办法禁用此默认按钮并仅使用我创建的 JPanel 中我自己的按钮?

2:有没有办法通过 dialog.*addDialog.*buttonPressed() 中访问我的对话框中的控件?我想我可以在按下提交按钮时将控件的所有内容发送到一些变量,尽管这看起来有点懒惰。

谢谢

1) 不要使用 JOptionPane。直接创建一个 JDialog,然后向其添加一个 JPanel,并根据需要布置您自己的控件。

2) 您可以评估直接添加到 JPanel 的控件。

例如:

public void buttonPressed(){
    JDialog dialog = new JDialog();
    JPanel panel = new JPanel();
    JTextField tf = new JTextField();
    panel.add(tf);
    JButton ok = new JButton("ok");
    panel.add(ok);
    dialog.add(panel);
    dialog.setVisible(true);
    System.out.println("dialog closed. tf=" + tf.getText());
}

当然这看起来不对,你需要使用布局管理器。我建议使用 NetBeans 来构建表单。这样您就可以更轻松地自定义 JDialog。

首先看一下 public JOptionPane(Object message, int messageType, int optionType, Icon icon, Object[] options),它将允许您自定义对话框显示的选项(或按钮)。

如果这对您来说还不够,您需要自己动手,这与创建 JFrame 基本相同,期望您使用 JDialog