我正在使用JOptionPane.showOptionDialog来显示JDialog。我想知道如何:
我的代码如下:
JPanel panel; //my JPanel built with dialog contents
int ret = JOptionPane.showOptionDialog(myFrame,
panel,
"titel",
JOptionPane.YES_NO_OPTION,
JOptionPane.PLAIN_MESSAGE,
null,
options,
options[1]);
我知道我可以通过这种方式获得建立JDialog的预期结果:
JDialog dialog = new JDialog(panel);
dialog.setResizable(true);
dialog.setSize(800,600);
dialog.setVisible(true);
最后一个解决方案的问题是我无法获得返回值。
编辑: 回应@camickr观察:
为什么需要设置首选大小?如果你构建面板 正确的应该以其首选尺寸显示。
我不确定在这一点上完全理解Swing。问题是,例如,我通过JDialog显示使用JFreeChart构建的ChartPanel。现在,我认为该面板有自己的首选尺寸,但我希望看到它更大。如果没有明确使用setPreferredSize(),我怎么能这样做?
阅读JOptionPane API。搜索“直接使用”。它告诉你如何 直接访问选项窗格使用的对话框,您可以
我读了它,但是我找不到合适的方法来理解在JDialog上按下了哪个按钮(确定或取消)。
答案 0 :(得分:4)
使用HierarchyListener来访问JOptionPane的黑客攻击也有效:
http://blogs.oracle.com/scblog/entry/tip_making_joptionpane_dialog_resizable
// TIP: Make the JOptionPane resizable using the HierarchyListener
pane.addHierarchyListener(new HierarchyListener() {
public void hierarchyChanged(HierarchyEvent e) {
Window window = SwingUtilities.getWindowAncestor(pane);
if (window instanceof Dialog) {
Dialog dialog = (Dialog)window;
if (!dialog.isResizable()) {
dialog.setResizable(true);
}
}
}
});
答案 1 :(得分:2)
为什么需要设置首选大小?如果正确构建面板,则应以其首选尺寸显示。
阅读JOptionPane API。搜索“直接使用”。它向您展示了如何直接访问选项窗格使用的对话框,您可以
第二种方法为什么要设置尺寸?再次打包()对话框,它将显示在面板首选大小。
你的意思是你无法获得回报价值?您可以访问自定义面板的任何方法。因此,您可以在再次接收控件时调用getXXX()方法。只需确保对话框是模态的,并且setVisible(true)之后的代码将阻塞,直到对话框关闭。
答案 2 :(得分:0)
如果你想完全采用第二种方法,你必须在某处创建和定位你自己的“YES”和“NO”按钮(因为原始的JDialog只是一个空的可修改框架)。因此,您需要将MouseListener附加到两个按钮并处理单击事件。点击一下,你就会知道按下了什么按钮,你只需要在对话框上调用dispose()来关闭它。