JDialog-如何设置固定宽度和可变高度?

3
我有一个JDialog对象,它必须是200像素宽,无论其内容如何。我需要能够动态调整高度,以确保始终显示所有内容。我该如何做?
我尝试重写JDialog.getPreferredSize()方法,但我不知道要添加什么高度值。
我尝试检查主JPanel是否isValid()和isShowing(),但只要面板的某一部分可见,两者都会返回true。
3个回答

6

首选大小仅适用于布局管理器,不能限制窗口大小。

窗口对等体有一个强制最小大小的方法,因此它可以很好地工作,但是除了监听调整大小并重置所需大小之外,没有任何内容可用于最大大小:

    setMinimumSize(new Dimension(200, Integer.MAX_VALUE));
    addComponentListener(new ComponentAdapter() {
        @Override
        public void componentResized(ComponentEvent e) {
            Dimension size = getSize();
            size.width = 200;
            setSize(size);
        }
    });

有没有一种方法可以动态设置高度,以确保所有内容都可见?谢谢! - Redandwhite
1
Window.pack()只有在你的首选尺寸都正确的情况下才能实现。 - Ingo Kegel
Window.pack() 会调用窗口及其所有子组件的 getPreferredSize() 方法,并将窗口大小设置为返回值。然而,如果我的首选大小是(例如)450 x 32,并且我将宽度固定为200,则首选高度仍为32。因此,一些内容可能会被裁剪。 - Redandwhite
你需要调整你的首选尺寸,以使窗口的宽度为200。使用现代的布局管理器(例如MigLayout),即使不覆盖getPreferredSize方法,这也非常容易实现。 - Ingo Kegel

0
如果您正在使用JDialog,您可以像这样覆盖getPreferredSize方法:
@Override
public Dimension getPreferredSize() {
    return Toolkit.getDefaultToolkit().getScreenSize();
}

或者明确指定维度:

@Override
public Dimension getPreferredSize() {
    return new Dimension(width, height);
}

0

当覆盖 getPreferredSize() 方法时,你可以询问父类关于高度的信息:

public Dimension getPreferredSize() {
    Dimension superPref = super.getPreferredSize();
    return new Dimension(200, superPref.getHeight());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接