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

标签 java graphics

我有一个带有绘制方法的类,该方法接受 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/

相关文章:

java 如何让一个矩形随时间移动

c++ - 绘制 2D map 坐标到 OpenGL 3D 投影

java - 你能在一个条件下有一个范围 "Not equal to"吗?

java - 使用 .getLocations 确定元素在两个浏览器中的移动

java - 我应该在 win 10 64 位电脑上安装哪个 java sdk 和 android sdk 版本?

java - 为背景创建状态列表可绘制 XML - Android

c# - 如何绘制看起来像 CAD 立面图的矩形

java - 我可以装饰 Guava 的 Joiner 类吗

c++ - 访问呈现的 WPF 页面/窗口的底层 DirectX 表面/渲染目标

c# - 如何生成/计算十二面体的顶点?