当前位置: 首页 > 知识库问答 >
问题:

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

胡高寒
2023-03-14

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

共有2个答案

鲁滨海
2023-03-14

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

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

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

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

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

艾善
2023-03-14

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

所有您需要做的是添加组件到您的面板/框架,然后使用:

frame.pack();
frame.setVisible();

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

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

我不希望用户能够将框架的尺寸设置在一定尺寸以下。

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

在任何情况下,您都可以通过以下方式设置最小值:

frame.pack();
frame.setVisible();
frame.setMinimumSize( frame.getSize() );
 类似资料:
  • 对于我在Java中创建的GUI应用程序,我有以下内容: 一个JFrame,设置为最小大小为(300,200) 一个JSplitPane,其中包含: 在左侧,最小大小为(100,0)的JScrollPane(包含JTree)(我只想将宽度限制为200) 在右边,一个最小大小为(200,0)的JPanel 在以下情况下,尺寸不会给我带来任何问题: 向左调整JSplitPane的大小(到JScrollP

  • 问题内容: Tkinter窗口的大小可以通过以下方法控制: 是否有等效的方法来控制Tkinter或ttk帧的大小? @Bryan:我将您的frame1.pack代码更改为以下代码: 我添加了此事件处理程序: 上面的事件处理程序检测到帧的宽度太大,但是无法防止大小增加。这是Tkinter的限制,还是我误解了您的解释? 问题答案: 没有单个魔术功能可以将帧强制为最小或固定大小。但是,您可以通过为框架指

  • 问题内容: 我编写了一个应用程序,该应用程序基于固定像素位置自定义绘制paint()中的所有内容。然后我禁用了调整框架的大小,使其始终可见。 但是,现在我希望能够调整它的大小,但是我不想更改我的绘图代码。我希望我可以在所有绘制代码​​之后抓取Graphics g对象的300x300正方形并将其大小调整为JFrame当前大小,但是我不知道自己在做什么。 这里是示例代码。在此,我希望将100x100正

  • 我应该添加哪些约束来设置宽度和高度与Superview成比例(在我的例子中是UIViewController的视图)在iOS自动布局中,通过自动调整大小,我们可以像下面显示的图片一样进行操作。

  • 问题内容: 我想自定义JTextField对象的高度和宽度。我尝试使用setSize方法,将宽度和高度作为尺寸和int传递。但是它们似乎都不起作用。我是否缺少某些内容,例如面板上的一些强制性方法调用或某些使大小自定义有效的内容?请帮忙。提前致谢。 编辑:这是一些代码: 问题答案: 让布局管理器照顾您的Swing组件的尺寸,但是如果绝对必要,请与尊重该属性的布局管理器结合使用。