【发布时间】:2012-09-13 19:08:48
【问题描述】:
如果我创建不可调整大小的 JFrame,并且启用了 windows Aero setLocation 似乎没有正确考虑窗口边框。
在下面的代码中,我希望第二帧位于第一帧的右侧,而不是边框重叠。如果 Aero 被禁用,或者如果我删除了对 setResizable 的调用,这将按预期完成。
import java.awt.Rectangle;
import javax.swing.JFrame;
public class FrameBorders {
public static void main(String[] args) {
JFrame frame1 = new JFrame("frame 1");
JFrame frame2 = new JFrame("frame 2");
frame1.setResizable(false);
frame2.setResizable(false);
frame1.setVisible(true);
Rectangle bounds = frame1.getBounds();
frame2.setLocation(bounds.x+bounds.width, bounds.y);
frame2.setVisible(true);
}
}
我做错了什么还是这是一个错误? 如何在不重叠边框的情况下并排显示 2 个不可调整大小的对话框?
编辑:添加屏幕截图(还将 frame2 更改为 JDialog 而不是 JFrame)
航空开启:
航空关闭:
Aero 开启但可调整大小:
【问题讨论】:
-
为什么要并排显示 2 个不可调整大小的对话框而没有重叠的边框?
-
我想显示 2 个最初并排放置的窗口
-
请不要在不可调整大小的容器上设置任意边界。见The Use of Multiple JFrames, Good/Bad Practice?
-
设置 JFrame#getRootPane().setBorder(someBorder); 会发生什么,因为 Areo 在底部和左侧都有阴影
-
@mKorbel 设置Border 设置内部Border 但对窗口边框没有影响
标签: java windows swing aero absolutelayout