6

我已经继承java.awt.Frame并覆盖了该paint()方法,因为我希望手动绘制窗口的全部内容。

但是,在图形对象上,(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);
}
4

2 回答 2

3

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

于 2008-10-11T00:28:00.127 回答
3

所以你想绘制整个区域而不想要标题栏?

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

于 2008-10-22T00:08:36.573 回答