将JPanel传递给绘制矩形的方法

时间:2017-05-20 21:50:07

标签: java graphics

我有一个带有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上的矩形?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您不应该通过从JPanel获取Graphics对象来进行绘制。你应该做的是继承JPanel并覆盖paintComponent,检查this

之所以如此,是因为每次绘制Panel时都会创建Graphics实例,并且您无法控制它,因为它的父级(JFrame)可能决定何时这样做。因此,您永远不应对Graphics实例做任何假设,并且必须在paintComponent方法中包含绘制逻辑。

您没有看到矩形的原因是因为您使用旧的Graphics实例绘制它们,或者因为在下一个rePaint中它们将被删除,因为它不是它应该的顺序(这些调用必须是在paintComponent方法中。)