我有一个带有绘制方法的类,该方法接受 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("color is " + g.getColor().toString());
我看到颜色发生变化,但我没有看到 JPanel 上出现矩形。这个 JPanel 是我的类中的一个对象,它从 JFrame 扩展。我需要做什么才能看到 JPanel 上的矩形?
最佳答案
您不应该通过从 JPanel 获取 Graphics 对象来进行绘制。你应该做的是子类化 JPanel 并覆盖 PaintComponent,检查 this 。
原因是每次绘制面板时都会创建 Graphics 实例,并且您无法控制它,因为它的父级(JFrame)可能会决定何时执行此操作。因此,您永远不应该对 Graphics 实例做出任何假设,并且必须将绘制逻辑包含在 PaintComponent 方法中。
您看不到矩形的原因是因为您正在使用旧的 Graphics 实例绘制它们,或者因为在下一次重绘中它们被删除,因为不是它应该的顺序(这些调用必须是在paintComponent方法中)。
关于java - 将 JPanel 传递给绘制矩形的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44091130/