这里的场景如下:我使用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)。
答案 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)。