繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM