自定义JComponent组件Circle无法在JPanel上显示的问题排查
Swing自定义JComponent不显示圆形的问题解决
你的问题不是JPanel覆盖了圆形,也不是paintComponent方法写错了,核心原因是自定义的Circle组件没有设置合适的尺寸:
JComponent默认的首选大小(preferred size)是(0,0),而JPanel默认使用FlowLayout,布局管理器会根据组件的首选大小分配显示空间。因为你的Circle组件尺寸为0,所以即使绘制了圆形,也没有可见的区域来展示它。- 你的
paintComponent方法是正确的,调用super.paintComponent(g)能正确完成组件背景的清理等前置操作,不会导致绘制失败。
解决方案
重写Circle类的getPreferredSize方法,返回能容纳你绘制内容的尺寸。比如你绘制的圆形位置在(50,50),大小为100x100,那么组件的首选尺寸至少要设为150x150(50+100),才能完整显示圆形:
import javax.swing.*; import java.awt.*; public class Circle extends JComponent { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.RED); g.fillOval(50, 50, 100, 100); } @Override public Dimension getPreferredSize() { return new Dimension(150, 150); } }
另外,也可以在创建Circle实例时手动设置大小(new Circle().setSize(150,150)),但重写getPreferredSize是更符合Swing布局规范的做法,布局管理器会优先遵循这个尺寸来布局组件。
内容的提问来源于stack exchange,提问作者Nikos Mitsopoulos
相关产品推荐
相关产品推荐

