java - 将渲染偏移量添加到 Frame

标签 java awt java-2d insets

这里的场景是这样的:我正在使用 Frame 对象通过 AWT(无 Swing)进行一些较低级别的渲染。唯一的问题是,当直接向它们渲染时,框架不考虑它们的边界。因此,正如我们都可能知道的那样,在 (0,0) 处渲染一个 Rectangle 看起来并不像是在做正确的事情。这是因为 (0,0) 是框架的左上角。

所以问题是,不是像这样在屏幕上添加所有要渲染的框架插图:

//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();

我希望能够简单地向框架的底层图形添加某种偏移量。这可能吗?需要明确的是,如果有这样的功能就好了:

g.setDrawingOrigin(x, y);

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

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

最佳答案

你要找的方法是Graphic的translate(int, int) .

所以你会调用,

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

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

关于java - 将渲染偏移量添加到 Frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25224851/

相关文章:

java - 你能在 GregorianCalendar 日期中设置 AM/PM 还是你只能得到的东西

java - paint(Graphics g) 阻止组件被绘制

java - 设置 jdialog 框中文本的格式

Java 小程序的替代方案和桌面应用程序中的可用性

swt - 更快: SWT or Java2D?

java - 既然 Oracle 不再支持 OpenJDK 8 和 11,Corretto 会发生什么情况?

java - Do-while 问题 java

java - 如何创建动画方法并将其放入绘制方法中?我的代码不起作用

java - Java2D如何获取绘制的圆的坐标

java - 平滑锯齿状路径