我有一个带有draw方法的类,它接受一个JPanel作为参数。 draw方法的第一行是:
Graphics g = p.getGraphics();
其中(p是作为参数传递给jPanel(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上的矩形?
答案 0 :(得分:1)
JPanel并不知道它的画布已更新,因此您在屏幕上看不到任何内容。正确的方法是覆盖JPanel的方法 onPaintComponent 并在此方法中绘制。这样,在您调用JPanel.repaint()之后,您将看到您已经绘制的内容。
答案 1 :(得分:1)
您不应该通过从JPanel获取Graphics对象来进行绘制。你应该做的是继承JPanel并覆盖paintComponent,检查this。
之所以如此,是因为每次绘制Panel时都会创建Graphics实例,并且您无法控制它,因为它的父级(JFrame)可能决定何时这样做。因此,您永远不应对Graphics实例做任何假设,并且必须在paintComponent方法中包含绘制逻辑。
您没有看到矩形的原因是因为您使用旧的Graphics实例绘制它们,或者因为在下一个rePaint中它们将被删除,因为它不是它应该的顺序(这些调用必须是在paintComponent方法中。)