向Frame添加渲染偏移

时间:2014-08-10 01:59:48

标签: java awt java-2d insets

这里的场景如下:我使用Frame对象用AWT(没有Swing)做一些低级渲染。唯一的问题是,Frames在直接渲染到它们时,不考虑它们的边界。所以,正如我们大家都知道的那样,在(0,0)处渲染一个Rectangle看起来并不像是在做正确的事情。这是因为(0,0)是Frame的文字左上角。

所以问题是,而不是像在框架内添加框架插图一样,以便在屏幕上呈现:

//This is within the rendering method in the Frame subclass. A buffer strategy is already created
Graphics2D g = (Graphics2D)bufferStrategy.getDrawGraphics();
g.clearRect(0, 0, getWidth(), getHeight());
g.setColor(Color.WHITE);
Insets insets = this.getInsets();
g.drawString("FPS: " + getFPS(), 100 + insets.left, 100 + insets.top); //<-- Ugh.
g.dispose();

我希望能够简单地将各种偏移量添加到Frame的底层图形中。这可能吗?要清楚,有这样的功能会很好:

g.setDrawingOrigin(x, y);

通过这种方法,我可以逃脱谋杀。我不知道为什么不会埋没在某个地方......

注意:它是一个Frame而不是JFrame,因此我们缺少一个内容窗格来引用。另外,避免向Frame添加任何其他组件会很好。我试图保持这个尽可能轻量级(因此,框架而不是JFrame。好吧,没有太大的区别,但让我玩得开心:D)。

2 个答案:

答案 0 :(得分:3)

您正在寻找的方法是Graphic translate(int, int)

所以你打电话,

g.translate(insets.left, insets.top);

另一种方法是,不是直接绘制到框架,而是可以添加另一个适合并使用所有Frame空间的组件,然后在该子组件的绘制方法中执行所有绘制,其中x和y是您期望的位置

答案 1 :(得分:2)

直接来自JavaDocs ......

  

框架的大小包括为边框指定的任何区域。可以使用getInsets方法获得边框区域的尺寸,但是,由于这些尺寸与平台相关,因此在通过调用pack或show使框架可显示之前,无法获得有效的insets值。由于边框区域包括在框架的整体尺寸中,边框有效地遮挡了框架的一部分,约束了可用于渲染的区域和/或将子组件显示到具有左上角位置(矩形)的矩形。 left,insets.top),宽度大小为 - (insets.left + insets.right)高度 - (insets.top + insets.bottom)。