Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JPanel传递给方法以绘制矩形_Java_Graphics - Fatal编程技术网

Java 将JPanel传递给方法以绘制矩形

Java 将JPanel传递给方法以绘制矩形,java,graphics,Java,Graphics,我有一个带有draw方法的类,它接受一个JPanel作为参数。 绘制方法中的第一行是: Graphics g = p.getGraphics(); 其中(p是作为参数传递给draw(jPanel p)方法的jPanel的值) 我想画不同颜色的不同矩形(基于条件语句)。所以我用 g.setColor(Color.RED) // or another color 然后我使用 g.fillrect(x,y,xsize,ysize). 当我这样做的时候 System.out.println("

我有一个带有draw方法的类,它接受一个JPanel作为参数。 绘制方法中的第一行是:

Graphics g = p.getGraphics(); 
其中(p是作为参数传递给draw(jPanel p)方法的jPanel的值)

我想画不同颜色的不同矩形(基于条件语句)。所以我用

g.setColor(Color.RED) // or another color
然后我使用

g.fillrect(x,y,xsize,ysize). 
当我这样做的时候

System.out.println("color is " + g.getColor().toString());

我看到颜色在变化,但我没有看到JPanel上出现的矩形。这个JPanel是我的类中的一个对象,它从JFrame扩展而来。我需要做什么才能看到我的JPanel上的矩形

JPanel不知道它的画布已更新,因此您在屏幕上看不到任何内容。正确的方法是重写JPanel在PaintComponent上的方法,并在该方法内部绘制。这样,调用JPanel.repaint()后,您将看到绘制的内容。

JPanel不知道其画布已更新,因此您在屏幕上看不到任何内容。正确的方法是重写JPanel在PaintComponent上的方法,并在该方法内部绘制。这样,在调用JPanel.repaint()之后,您将看到绘制的内容。

您不应该通过从JPanel获取图形对象来绘制。您应该做的是将JPanel子类化并覆盖paintComponent,检查

之所以这样做,是因为每次绘制面板时都会创建图形实例,而您无法对其进行控制,因为其父对象(JFrame)可能会决定何时执行此操作。因此,永远不要对图形实例进行任何假设,并且必须在paintComponent方法中包含绘制逻辑


之所以看不到矩形,是因为您正在使用旧图形实例绘制它们,或者是因为在下一次重新绘制时,它们将被擦除,因为这不是应该的顺序(这些调用必须在paintComponent方法中).

您不应该通过从JPanel获取图形对象来绘制。您应该做的是将JPanel子类化并覆盖paintComponent,检查

之所以这样做,是因为每次绘制面板时都会创建图形实例,而您无法对其进行控制,因为其父对象(JFrame)可能会决定何时执行此操作。因此,永远不要对图形实例进行任何假设,并且必须在paintComponent方法中包含绘制逻辑

之所以看不到矩形,是因为正在使用旧图形实例绘制它们,或者是因为在下一次重新绘制时,它们被擦除,因为这不是应该的顺序(这些调用必须在paintComponent方法中)