我有一个奇怪的问题.我正在使用窗口的null布局(= JFrame和Windows),如果我使用setResizable(false),窗口大小会变大(向右和向下,我会说大约10个像素).我不知道为什么.
这两个println返回相同的尺寸,有什么奇怪的,也……
mainWnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWnd.setTitle(wndTitle);
mainWnd.setBounds(wndPosX, wndPosY, wndWidth, wndHeight);
System.out.println(mainWnd.getHeight() + mainWnd.getWidth());
mainWnd.setResizable(false);
System.out.println(mainWnd.getHeight() + mainWnd.getWidth());
有人有想法吗?为什么窗口会调整大小?
更新:
同样的事情(使用和不使用setResizable编译它,如果你重叠窗口,你可以看到它):
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main
{
private static JFrame mainWnd = null;
public static void main(String[] args)
{
mainWnd = new JFrame();
mainWnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWnd.setTitle("asda");
mainWnd.setBounds(50, 50, 300, 300);
mainWnd.setResizable(false);
mainWnd.setVisible(true);
}
}
解决方法:
它在我的示例中没有变化,因此您必须有其他原因导致您的问题:
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Test4 {
protected static void initUI() {
JFrame frame = new JFrame("test");
frame.setBounds(0, 0, 300, 200);
frame.setVisible(true);
System.err.println(frame.getSize());
frame.setResizable(false);
System.err.println(frame.getSize());
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initUI();
}
});
}
}
编辑/ UPDATE:
将resizable设置为false时,不知何故插入不正确(至少在Windows 7和JDK 6上).不知何故,它们从30,8,8,8变为25,3,3,3,尽管边界(由操作系统绘制)实际上保持不变.由于insets是Frame的边界的一部分,因此当它不可调整大小时,框架实际上太大(视觉上).对我来说,当帧不可调整大小时,计算的insets中存在一个错误.
标签:java,swing,window
来源: https://codeday.me/bug/20190928/1828776.html