0

我正在JFrame(854 x 480) 内创建游戏。我正在尝试Rectangle在屏幕的右上角绘制一个。像这样:

int x, y;
Rectangle rect;

public Foo() {
    x = 0;
    y = 0;
    
    rect = new Rectangle(x, y, 63, 27);
}

....

public void draw(Graphics g) {
    g.drawRect(rect.x, rect.y, rect.width, rect.height);
}

但是当我这样做时,框会从屏幕上拉出来(x 坐标是正确的,但 y 坐标太高了:

屏幕外的矩形

当我将 y 坐标更改为 27(矩形的高度)时,它会向下移动到我想要的位置:

屏幕上的矩形

知道为什么会这样吗?或者如何解决?

4

3 回答 3

4

您是否覆盖了 JFrame 的 paint(..) 方法?坐标似乎在window/JFrame的坐标空间中,其中0/0包括非客户区(关闭框、标题栏等)。

您应该创建一个单独的组件并将其添加到主框架的内容窗格中 - 只是一个非常小的示例 - 请注意我使用的是paintComponent(..):

public static class MyPanel extends JPanel {
    @Override
    protected void paintComponent(final Graphics g) {
        super.paintComponent(g);
        final Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLUE);
        g2.draw(new Rectangle2D.Float(8,8, 128, 64));
    }

}

添加到 JFrame 内容窗格(使用默认或自定义 LayoutManager):

public class MyFrame extends JFrame {
    public MyFrame() {
       ...
       // since JDK 1.4 you do not need to use JFrame.getContentPane().add(..)
       this.add(new MyPanel());
    }
}

这应该可以解决问题。这是 Java SE 教程的相应部分

于 2013-06-05T18:08:46.413 回答
1

这是因为 JFrames 坐标从包括标题栏在内的左上角开始。您需要将标题栏的高度添加到您的 y 坐标中,以使其显示在左上角。

于 2013-06-05T18:10:51.617 回答
0

在 JPanel 中绘制矩形。

JPanel panel = new JPanel();
this.add(panel) //Add the panel to the frame and draw from there
                //Provided the class extends a JFrame
于 2013-06-05T18:12:22.317 回答