在Java中完全居中绘制矩形

时间:2011-01-09 00:38:51

标签: java center draw

我想在中间完美绘制的容器中绘制对象(包括放置组件)。

问题是,使用中间的x和y并减去/添加一半的窗口宽度和高度是不够的。

当我使用此代码绘制矩形时:

g.drawRect( 10, 10, this.getWidth() - 20, this.getHeight() - 20);

然后这不会工作。使用上面的线我想绘制一个四边形填充10个像素的矩形。 所以我以10x10开始,然后我取窗口的全宽和全高,然后减去20,因为左边是10,右边是10。

在这种情况下,我应该得到一个完全居中的矩形,与窗口边界相距10个像素。

但矩形的右侧和底侧不在窗口内,因此给予drawRect方法的宽度和高度太高。

我认为这来自于Windows边框。 点0x0不是您查看图纸的点。我猜0x0从窗口本身的左上角开始(没有绘图区域)。

所以在这种情况下我需要知道绘图区域。像矩形的东西给了我需要开始绘制的坐标,所以我可以将我的坐标映射到窗口坐标。

因此,当我想在0x0(可见绘图区域)绘制一个点时,此点必须映射到类似8x30的点。

我通过添加鼠标监听器进行测试,只要鼠标移动,就会打印鼠标位置。当我将鼠标移动到绘图区域的左上角位置时,我的应用程序打印出coord 8x30。这意味着左边框的宽度为8px,顶部栏(显示窗口标题和关闭/最小化按钮)的高度为30px。

我现在怎样才能使这个工作。我想说点什么

g.drawRect( 10, 10, this.getWidth() - 20, this.getHeight() - 20);

所以即使我调整窗口大小,我的矩形也会完全居中。

我认为当你尝试绘制它时,我更容易理解我的问题:

Font font = g.getFont(); 
FontRenderContext frc = g.getFontMetrics().getFontRenderContext(); 
Rectangle2D rect = font.getStringBounds( "Hello", frc); 
g.drawString( "Hello", (int) ( this.getWidth() - rect.getWidth()), (int) ( this.getHeight() - rect.getHeight())); 

这需要文本“Hello”的大小,然后尝试在右下角打印它。代码是正确的,但文本“Hello”显示在右下角,我需要调整窗口大小(使其更大)才能看到文本。

2 个答案:

答案 0 :(得分:1)

您是否直接在JFrame上绘图?如果你创建一个JPanel来绘制并将JPanel添加到JFrame会更容易。面板左上角的原点不会受到框架边框或标题栏的影响。

答案 1 :(得分:1)

容器的getInsets()方法应该提供绘制时需要应用的坐标偏移量。

以下是指向某些example code的链接。

相关问题