没有默认按钮的 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
我正在像这样打开一个 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