setSize()不适用于JFrame

eXX*_*XX2 9 java swing jframe

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

class Demo
{
    JFrame jf;
    Demo()
    {
        jf=new JFrame("Demo");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(5000,5000);
        jf.setVisible(true);
        System.out.println(jf.getSize());
    }
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {

            @Override
            public void run()
            {
                new Demo();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

jf.setSize(5000, 5000)用于JFrame,但之后getSize返回其他大小:( java.awt.Dimension[width=1386,height=788]我的屏幕分辨率是1366x768)我可以设置大于屏幕大小的帧大小吗?可能这样的行为提供了一些框架属性,但我不知道它们.

use*_*755 10

尝试使用setPreferredSize而不是setSize.适用于我的情况(Ubuntu 12.04 + GNOME 3).


Ste*_*n C 7

javadoc说:

"该方法会更改与几何相关的数据.因此,本机窗口系统可能会忽略此类请求,或者它可能会修改所请求的数据,以便以与桌面设置密切对应的方式放置和调整Window对象的大小."

这涵盖了您正在观察/抱怨的行为.

它不是很清楚,但有一个原因Window.setSize(...)就是窗口管理器(Java之外)通常会否决应用程序尝试执行此操作.据推测,这是因为它是滥用和"不是用户想要的".无论如何,最终不是您的应用程序调用覆盖窗口管理器的限制.


kle*_*tra 5

只是为了星期五的乐趣(也就是说,您不应该在生产环境中考虑做任何事:-)-与@jinguy代码一起玩得更远,我注意到在最小化框架之后使用了大于寿命的大小。通过编程方式使其从一开始就显示为怪物

    jf.setPreferredSize(new Dimension(5000,5000));
    jf.setMinimumSize(new Dimension(5000,5000));
    jf.pack();
    jf.setVisible(true);
    jf.setState(Frame.ICONIFIED);
    jf.setState(Frame.NORMAL);
    System.out.println(jf.getSize());
Run Code Online (Sandbox Code Playgroud)