在Mac OS X中获取AWT框架的可绘制区域?

问题描述:

我已经子类java.awt.Frame并重写paint()方法,因为我希望手动绘制整个窗口的内容。在Mac OS X中获取AWT框架的可绘制区域?

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

我可否以跨平台的方式确定第一个可绘制像素的坐标(即装饰高度),避免使用Mac OS X特有的模糊因子?为了找到窗口的实际可绘制区域,我会被强制嵌套一个Panel组件吗?

这里我的代码不居中窗口可绘画区域内的蓝色方块:

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

alt text http://x13n.com/paintable-area.png

您可以通过调用的getInsets方法(在容器中定义)找到帧插图。框架插页在框架API文档的顶部进行讨论。

因此,你想绘制整个区域,不想标题栏?假设您使用JDK 1.4(至少),那么您可以声明框架为“未修饰”(java.awt.Frame#setUndecorated(boolean))。这样就不会创建标题栏,因此可绘制框架的区域与框架消耗的区域相同。