Java 如何设置JFrame的最小尺寸,并使其根据框架厚度进行调整?

Java 如何设置JFrame的最小尺寸,并使其根据框架厚度进行调整?,java,swing,Java,Swing,我正在构建一个程序,并在多个操作系统上运行它。Windows 10和Windows 7。当我为一个Windows 10或Windows 7正确设置最小大小时,它对该操作系统有效,但会弄乱其他操作系统。有没有办法让setMinimumSize调整边框厚度?或者有没有办法得到该操作系统的边界厚度?或者有没有办法将JFrame的最小大小设置为打开时的大小?感谢您的帮助。谢谢。不要设置最小尺寸。布局管理器的工作是确定零部件的尺寸。布局管理器将在所有操作系统上执行其工作 您只需将组件添加到面板/框架中,然

我正在构建一个程序,并在多个操作系统上运行它。Windows 10和Windows 7。当我为一个Windows 10或Windows 7正确设置最小大小时,它对该操作系统有效,但会弄乱其他操作系统。有没有办法让setMinimumSize调整边框厚度?或者有没有办法得到该操作系统的边界厚度?或者有没有办法将JFrame的最小大小设置为打开时的大小?感谢您的帮助。谢谢。

不要设置最小尺寸。布局管理器的工作是确定零部件的尺寸。布局管理器将在所有操作系统上执行其工作

您只需将组件添加到面板/框架中,然后使用:

frame.pack();
frame.setVisible();
pack()
方法调用布局管理器,以便正确调整所有组件的大小

有关更多信息和工作示例,请阅读上Swing教程的部分。我建议您将所有Swing基础教程的教程添加到书签中

我不希望用户能够将框架的大小设置为低于某个大小

当一个应用程序告诉我框架有多小(大)时,这是非常烦人的。桌面是我的空间,如果我想让它变小(变大),那么你不必在意。如果我丢失了信息,我可以稍后将帧放大(缩小)。您的框架设计应该灵活,以允许调整大小

在任何情况下,您都可以通过执行以下操作来设置最小值:

frame.pack();
frame.setVisible();
frame.setMinimumSize( frame.getSize() );

不要设置最小尺寸。布局管理器的工作是确定零部件的尺寸。布局管理器将在所有操作系统上执行其工作

您只需将组件添加到面板/框架中,然后使用:

frame.pack();
frame.setVisible();
pack()
方法调用布局管理器,以便正确调整所有组件的大小

有关更多信息和工作示例,请阅读上Swing教程的部分。我建议您将所有Swing基础教程的教程添加到书签中

我不希望用户能够将框架的大小设置为低于某个大小

当一个应用程序告诉我框架有多小(大)时,这是非常烦人的。桌面是我的空间,如果我想让它变小(变大),那么你不必在意。如果我丢失了信息,我可以稍后将帧放大(缩小)。您的框架设计应该灵活,以允许调整大小

在任何情况下,您都可以通过执行以下操作来设置最小值:

frame.pack();
frame.setVisible();
frame.setMinimumSize( frame.getSize() );

我在使用Java8的macOS上遇到了这样的问题。我希望用户能够调整窗口大小,但要遵守布局管理器计算的最小大小。不幸的是,控制窗口大小的AWT代码只查看已显式设置的最小大小

这是我想出的解决办法。我覆盖了框架上的doLayout()方法:

@Override
public void doLayout()
{
    super.doLayout();

    LayoutManager m = getLayout();
    if (m != null) {
        Dimension d = m.minimumLayoutSize(this);
        setMinimumSize(d);
    }
}

现在,每次重新计算布局时,新的最小大小都会缓存为显式设置的值,以便AWT注意它。

我刚刚在使用Java 8的macOS上遇到了类似的问题。我希望用户能够调整窗口大小,但要遵守布局管理器计算的最小大小。不幸的是,控制窗口大小的AWT代码只查看已显式设置的最小大小

这是我想出的解决办法。我覆盖了框架上的doLayout()方法:

@Override
public void doLayout()
{
    super.doLayout();

    LayoutManager m = getLayout();
    if (m != null) {
        Dimension d = m.minimumLayoutSize(this);
        setMinimumSize(d);
    }
}

现在,每次重新计算布局时,新的最小大小都会缓存为显式设置的值,以便AWT注意它。

我这样做是为了最初设置大小,但在程序期间,我不希望用户能够将帧大小设置为低于某个大小。好的,谢谢。我之所以将其设置为最小大小,是因为我正在创建的游戏是一个设置大小的游戏。它对所有精灵都使用BuffereImage,所以我没有办法让它在java中缩放它们。如果您对如何使其更好有任何想法,我将非常感激。@GnarlyNarwhal,如果您不能缩放精灵,那么用户可能也无法将框架调整得更大。因此,在打包之前,应该先使用
frame.setresiable(false)
。那么你就不必担心最小或最大的尺寸了。我让他们把它变大,使精灵在屏幕上居中,并在游戏周围创建一个边框。我认为最好是完全限制它们。我这样做是为了最初设置大小,但在程序期间,我不希望用户能够将帧的大小设置为低于某个大小。好的,谢谢。我之所以将其设置为最小大小,是因为我正在创建的游戏是一个设置大小的游戏。它对所有精灵都使用BuffereImage,所以我没有办法让它在java中缩放它们。如果您对如何使其更好有任何想法,我将非常感激。@GnarlyNarwhal,如果您不能缩放精灵,那么用户可能也无法将框架调整得更大。因此,在打包之前,应该先使用
frame.setresiable(false)
。那么你就不必担心最小或最大的尺寸了。我让他们把它变大,使精灵在屏幕上居中,并在游戏周围创建一个边框。我认为最好是完全限制他们。