如何制作可调整大小的JDialog?

Hei*_*bug 3 java size swing jdialog

我正在使用JOptionPane.showOptionDialog来显示JDialog。我想知道如何:

  1. 设置对话框的尺寸(目前,我在给定的面板上使用setPreferredSize()方法,但我知道不应该使用这种方法)。
  2. 使显示的对话框可调整大小。

我的代码如下:

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]);
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过以下方式构建JDialog获得所需的结果:

JDialog dialog = new JDialog(panel);
dialog.setResizable(true);
dialog.setSize(800,600);
dialog.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

最后一个解决方案的问题是我无法获得返回值。

编辑:响应@camickr的观察:

为什么需要设置首选尺寸?如果正确构建面板,则应以其首选大小显示它。

我不确定在这一点上是否完全了解Swing。问题是,例如,我正在通过JDialog显示使用JFreeChart构建的ChartPanel。现在,我假设面板具有自己的首选大小,但我希望看到更大的面板。没有显式使用setPreferredSize()怎么办?

阅读JOptionPane API。搜索“直接使用”。它显示了如何直接访问选项窗格使用的对话框,并且您可以

我读了它,但找不到正确的方法来了解JDialog上按下了哪个按钮(确定或取消)。

pru*_*nge 5

这种使用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);
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)