【问题标题】:Java 2D graphics - drawing a rectangleJava 2D 图形 - 绘制一个矩形
【发布时间】:2013-09-03 11:41:18
【问题描述】:

所以我对 Java 编程和一般编程很陌生,请原谅我缺乏知识。我正在尝试在屏幕上用一些给定的坐标绘制一个简单的矩形。

这是我在抽屉类中的代码:

public class Drawer extends JPanel {

public static void drawPixel(Graphics g, int x, int y) {
    g.fillRect(x, y, 5, 5);
}

}

这是我试图在主类中使用的代码:

Drawer drawer = new Drawer();
Drawer.drawPixel(Graphics g, i9, i10);

所以我真的不明白第一个参数是什么。它给了我一个错误,说它无法解析“符号 g”。 i9 和 i10 是我希望它绘制矩形的坐标。

提前感谢您的帮助。 :)

【问题讨论】:

标签: java swing jpanel graphics2d


【解决方案1】:

你不能画那样的东西。您应该使用paintComponent() 方法来绘制。

检查一下:

public class RectDrawer extends JPanel {
    private int x;
    private int y;
    public RectDrawer(int x, int y){
        this.x = x;
        this.y = y;
    }
    public void paintComponent(Graphics g) {
        g.fillRect(x, y, 5, 5);
    }
}

【讨论】:

  • 如果你在 Swing 中工作,这几乎是最好的方法——我喜欢它。
  • paintComponent 不是静态的,也不是公开的 (docs.oracle.com/javase/7/docs/api/javax/swing/…)
  • 静态不应该在那里,否则(根据我的经验)这是覆盖它的正确方法.. 不是吗?
  • @Surveon public 有效,但您的面板的客户绝对不需要直接调用该方法。他们在JComponent 中使用protected 是有原因的。作为一般规则:除非绝对必要,否则不要创建方法public。在这种情况下,您不需要。
  • 明白。现在回想起来,我实际上已经多次犯过这个错误 - 谢谢你的洞察力。
【解决方案2】:

Drawer.drawPixel(Graphics g, i9, i10); 可能是您的问题的根源。

您正在传递(作为第一个参数)类似于Graphics g 的内容。考虑只通过 g 本身而不使用 Graphics 位 - 这应该可以解决您的问题。

Graphics g 对象指的是图形上下文 - 这是有效地将内容绘制到屏幕上的原因。通过在其上调用方法,您可以在用户可以看到的地方逐字绘制。

JPanel 为例,你可以重写它的paintComponent() 方法。您会注意到此方法接受一个 Graphics 对象 - 然后您可以使用它在面板中绘制内容。

【讨论】:

    【解决方案3】:

    您的某些代码不像 Graphics g 那样正确。因为其他人有,所以我不打算讨论它,但我建议你看一些教程。如果您是 Java 新手,请查看:

    video

    您应该查看该视频系列,它教您对 Java 语法和基础知识的深入理解。然后你就可以开始查看这样的教程了:

    video

    那本书教你对用 Java 制作复杂游戏有非常深刻的理解。我什至建议中级和高级 Java 程序员检查一下。当我开始时,我查看了其他教程,它们主要在中途停止,有严重的错误或类似的东西。这个视频教了一个更简单的方法。

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多