Swing:为JDialog设置固定的窗口大小

时间:2013-11-29 20:53:20

标签: java swing layout jdialog preferredsize

我尝试了 setPrefferedSize setSize 方法,但对话框仍以最小尺寸打开。

private void method() {
    commandDialog.setPreferredSize(new Dimension(100,100));
    - - - 
    - - -   //Components added to dialogPanel

    commandDialog.add(dialogPanel);

    // Tried this as well: commandDialog.setSize(40, 40);     
    commandDialog.validate();
    commandDialog.setVisible(true);
}

3 个答案:

答案 0 :(得分:19)

不要忘记在pack()之前的对话框中致电setVisible(true)

此外,许多人会建议不要设置对话框的preferredSize,而是覆盖它或其内容窗格的getPreferredSize()方法,作为一种更清晰,更安全的方法来正确调整其大小。


修改
霍尔格发布:

  

如果仅用于返回相同的常量大小,则覆盖getPreferredSize()并不是更好。

我认为我们都同意让getPreferredSize()返回一个愚蠢的常量大小通常是要避免的(虽然它是稳定的)。大多数情况下,我避免设置size / preferredSize或覆盖getPreferredSize,而是尝试让我的组件和他们自己的首选大小以及布局管理器本身的大小,这也是由pack()方法启动的。偶尔我需要更积极地尝试设置组件的大小,例如,如果我需要将组件的大小设置为背景图像,然后我将覆盖getPreferredSize()并使用图像尺寸返回的维度,或将使用某种类型的程序逻辑来帮助确定最佳大小。但是我们再次同意,你越少越好,越好。


编辑2
霍尔格发布:

  

...但问题是关于JDialog和对话框永远不会自动调整自己的首选大小。

再次,当您在其上调用pack()时,他们和所有顶级窗口都可以。这就是为什么我推荐这个,以及为什么这是我对他的问题的主要答案。

答案 1 :(得分:4)

你试过吗

commandDialog.setSize(new Dimension(100, 100));
commandDialog.setResizable(false);

答案 2 :(得分:0)

以下对我有用:

    commandDialog.pack();
    commandDialog.setVisible(true);