Java 将JPanel传递给方法以绘制矩形
我有一个带有draw方法的类,它接受一个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("
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方法中)