[英]Passing a JPanel to a method to draw rectangles
我有一个带有draw方法的类,该方法接受JPanel作为参数。 draw方法的第一行是:
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的方法onPaintComponent并在此方法内部进行绘制。 这样,在调用JPanel.repaint()之后,您将看到绘制的内容。
您不应通过从JPanel获取Graphics对象来绘画。 您应该做的是继承JPanel并重写paintComponent,检查this 。
原因是因为每次绘制Panel时都会创建Graphics实例,并且您对此没有控制权,因为它的父级(JFrame)可能会决定何时这样做。 因此,您永远不要对Graphics实例做任何假设,并且必须在paintComponent方法中包括绘画逻辑。
之所以看不到矩形,是因为您正在用旧的Graphics实例绘画它们,或者因为在下一次rePaint中它们将被擦除,因为这不是应该的顺序(这些调用必须在paintComponent中)方法)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.