在Java中setMaximumSize无法工作

6

我有一个带有JFrame的Java程序

我正在使用绝对定位

这是我的主函数

public static void main(String[] args) {
    ape Ape = new ape();
    Ape.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Ape.setSize(1000,1000);
    Ape.setMinimumSize(new Dimension(1000,1000));
    Ape.setMaximumSize(new Dimension(1000,1000));
    Ape.setVisible(true);
}

当我运行程序并尝试调整窗口大小时,我无法将其缩小。当我尝试放大窗口时,它可以正常工作,基本上跳过了setMaximumSize()函数。我已经阅读了一些资料,显然这种情况以前发生过。这是一个已知的bug吗?如果是,我听说我可以创建一个Window Listener,但是当我尝试实现WindowListener所需的函数时,无法找到任何解决我的问题的东西。请您自己尝试一下并看看会发生什么……提前感谢您。PS...请不要嘲笑我给我的类起的名字… :)
4个回答

13

感谢你的报告和Ape.setResizable基本上就是我想要的,谢谢。 - user451498
我正在查看这个bug是否已经被解决。我正在使用jdk1.6.0_45(该应用程序几年前就开发完成了,现在我在进行维护)。它仍然是一个bug吗? - gengencera

1
在我的情况下,我使用了以下内容,并且它起作用了:

    Dimension newDim = new Dimension(width, height);

    label.setMinimumSize(newDim);
    label.setPreferredSize(newDim);
    label.setMaximumSize(newDim);
    label.setSize(newDim);
    label.revalidate();

我不知道该如何感谢你..非常非常感谢你。你救了我的面子和一天。重新验证是关键。 - Suresh Atta

1

对于Netbeans用户,尝试在setMaximizedBounds()中设置最大框架的值,单击框架的属性,您将找到一个选项来定义setMaximizedBounds的值。


这个两年前的回复帮了我很多,谢谢。 - O. Salah

0
我是这样修复它的:
    frame.setBounds(0, 0, 1480, 910);
    frame.setMinimumSize(new Dimension(1200, 799));
    frame.setMaximumSize(new Dimension(1480, 910));
    frame.setPreferredSize(new Dimension(1480, 910));
    frame.setLocationRelativeTo(null);
    frame.addComponentListener(new ComponentAdapter() {

        @Override
        public void componentResized(ComponentEvent e) {
            double w = frame.getSize().getWidth();
            double h = frame.getSize().getHeight();
            if(w > 1480.0 && h > 910.0){
                frame.setSize(new Dimension(1480, 910));
                frame.repaint();
                frame.revalidate();
            }

            super.componentResized(e);
        }

    });

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