【问题标题】:Java setPreferredSize() failsJava setPreferredSize() 失败
【发布时间】:2019-04-09 16:44:57
【问题描述】:

这是我第一次尝试使用 Java,所以请放轻松。 我查看了其他JFrame 问题,但我根本无法找到可行的解决方案。

由于某种原因,我无法让 setPreferredSizesetSize 工作。

窗口继续默认为不同的大小。 setMinimumSize 似乎工作得很好。 setMaximumSize 似乎从我的阅读中被窃听。

最终我只是想将窗口设置为特定的不可更改的大小。

    public LauncherFrame(@NonNull Launcher launcher) {
        super(tr("launcher.title", launcher.getVersion()));

        this.launcher = launcher;
        instancesModel = new InstanceTableModel(launcher.getInstances());

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        initComponents();
        setPreferredSize(new Dimension(900, 600));
        setMinimumSize(new Dimension(600, 300));
        setResizable(false);
        pack();
        setLocationRelativeTo(null);

        SwingHelper.setFrameIcon(this, Launcher.class, "icon.png");

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                loadInstances();
            }
        });
    }

* 更新 *

哇,好吧...我是个白痴!调整大小不起作用的原因是因为大小是在另一个称为文件的外部设置的......谢谢大家的帮助。我已经标记了正确答案。

【问题讨论】:

    标签: java jframe


    【解决方案1】:

    您正在调用 pack();,这会将框架打包成不同的大小,只需删除 pack(); 调用即可。

    pack 方法调整框架的大小,使其所有内容都位于或 高于他们的首选尺寸。打包的另一种方法是建立一个 通过调用 setSize 或 setBounds(它还设置 框架位置)。

    更多曝光请看这篇帖子What does .pack() do?

    如果你仍然失败,你可以尝试使用setSize()

        setPreferredSize(new Dimension(900, 600));
        setSize(new Dimension(900, 600));
        setMinimumSize(new Dimension(600, 300));
    

    【讨论】:

    • 嗯,似乎没有改变。我也很有希望。这似乎也是显而易见的解决方案。也许还有其他东西阻碍了大小。我可以强制吗?
    • initComponents 在做什么?包装似乎是明显的原因。
    • 更新了我的答案。
    • 是的,我不知道。也许其他人可以提供帮助
    • 感谢您的尝试!我很感激!
    【解决方案2】:

    您在设置窗口大小之前调用了initComponents() 方法。

    这样,您将绘制整个窗口,然后设置大小,导致您设置的大小被忽略。

    我的建议是将 2 个 Dimension 对象传递给 initComponents 方法; 1 个用于 preferredSize,1 个用于 minimumSize

    然后,先设置大小,然后再绘制到屏幕上。

    希望这会有所帮助。

    【讨论】:

    • 如果你的代码有有意义的 cmets,那真的很有帮助。这就是评论首先存在的原因。也许尝试launcher.setSize()或任何你试图设置大小的框架),而不是只调用setSize()记住您必须在绘制窗口或面板之前设置大小,以便正确呈现它
    • 不,那也失败了。此外,结果 initComponents 并没有影响它。我删除了这些代码部分,但窗口仍然拒绝设置为指定的大小。
    • 好吧,如果你愿意,你可以将 cmets 添加到你的代码中并在这里发布,我会看看我能做些什么来提供帮助。
    • 明天试试。太阳出来了哈哈。大概应该去睡觉了。感谢您的帮助!
    猜你喜欢
    • 2015-06-05
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2012-03-18
    相关资源
    最近更新 更多