English 中文(简体)
如何在Mac OS X中获取AWT帧的可绘制区域?
原标题:
  • 时间:2008-10-11 00:21:59
  •  标签:

我已经对 java.awt.Frame 进行了子类化,并且已经覆盖了 paint() 方法,因为我希望手动绘制整个窗口的内容。

然而,在图形对象上,(0,0) 对应于窗口内部标题栏装饰的左上角,而不是第一个可绘制的像素。

我能以跨平台的方式确定第一个可绘制像素的坐标(即装饰高度),避免使用仅适用于Mac OS X的< a href="https://en.wikipedia.org/wiki/Fudge_factor" rel="nofollow noreferrer">妥协措施吗?我是否被迫嵌套< a href="https://docs.oracle.com/javase/9/docs/api/java/awt/Panel.html" rel="nofollow noreferrer">面板组件以找到窗口的实际可绘制区域?

在这里,我的代码无法将蓝色正方形居中放置在窗口的可绘制区域内:

@Override
public void paint (Graphics g) {
    g.setColor(Color.BLUE);
    g.setPaintMode();
    g.fillRect(30, 30, getWidth()-60, getHeight()-60);
}
最佳回答

您可以通过调用 getInsets 方法(定义在 Container 中)来查找框架插页。框架插页在 Frame API 文档的顶部进行了讨论。

问题回答

你想要涂绘整个区域,完全不要标题栏吗?

假设您使用的是JDk 1.4(至少),那么您可以将框架声明为“未装饰”(java.awt.Frame#setUndecorated(布尔值))。这种方法可以创建无标题栏,因此框架绘制区域与框架消耗区域相同。





相关问题
热门标签