Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在切换SetResizeable()时阻止JFrame更改大小_Java_Swing_Jframe_Resize_Resizable - Fatal编程技术网

Java 如何在切换SetResizeable()时阻止JFrame更改大小

Java 如何在切换SetResizeable()时阻止JFrame更改大小,java,swing,jframe,resize,resizable,Java,Swing,Jframe,Resize,Resizable,所以我已经多次遇到这个问题,还没有找到解决办法。我有一个JFrame,它能够切换大小调整。然而,对于我想要的,我希望维度保持完全相同,但是当我setresizeable(false)时JFrame改变大小。为什么会这样,我如何阻止它发生 以下是一个示例: import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public

所以我已经多次遇到这个问题,还没有找到解决办法。我有一个
JFrame
,它能够切换大小调整。然而,对于我想要的,我希望维度保持完全相同,但是当我
setresizeable(false)时
JFrame改变大小。为什么会这样,我如何阻止它发生

以下是一个示例:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class ResizeSample extends JFrame{
    public ResizeSample() {
        super("Resize Sample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(300, 300));
        setLocation(1930, 10);

        JButton toggle = new JButton("Toggle Resize");
        toggle.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setResizable(!isResizable());
            }
        });

        add(toggle, BorderLayout.NORTH);

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new ResizeSample();
    }
}
编辑

我还忘了提到,当我将
ActionListener
代码更改为:

    toggle.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("Before: " + getSize());
            setResizable(!isResizable());
            System.out.println("After: " + getSize());
            System.out.println();
        }
    });

为了检查尺寸更改,它不会识别更改,但在运行程序时可以清楚地看到。

调用
setresizeable(false)
后,它的大小是多少?我可以想象大小将被设置为
getPreferredSize()
返回的值,但这只是一个猜测。@Axel在调用
setResizeable(false)
前后调用
setPreferredSize()
表示大小相同,但从视觉上看,显然发生了变化。调用
getSize()会得到什么
调用前后
setresizeable(false)
?如果在调用
setResizeable(false)
之前执行
setPreferredSize(null)
,会发生什么情况?什么L&F?Mac OS X上不调整大小,这也会将
窗口
移动到my(较小且垂直偏移)屏幕的右上角。另请参见。我在Windows 10上使用
getSystemLookAndFeelClassName()
。当我在学校的一台运行MacOSX的计算机上测试它时,我也不记得看到过这个问题。这是否意味着这是特定于Windows的?如果是的话,有没有办法修复它?调用
setresizeable(false)
后它的大小是多少?我可以想象大小将被设置为
getPreferredSize()
返回的值,但这只是一个猜测。@Axel在调用
setResizeable(false)
前后调用
setPreferredSize()
表示大小相同,但从视觉上看,显然发生了变化。调用
getSize()会得到什么
调用前后
setresizeable(false)
?如果在调用
setResizeable(false)
之前执行
setPreferredSize(null)
,会发生什么情况?什么L&F?Mac OS X上不调整大小,这也会将
窗口
移动到my(较小且垂直偏移)屏幕的右上角。另请参见。我在Windows 10上使用
getSystemLookAndFeelClassName()
。当我在学校的一台运行MacOSX的计算机上测试它时,我也不记得看到过这个问题。这是否意味着这是特定于Windows的?如果是的话,有没有办法解决?