我正在尝试在未修饰的JFrame中创建一个关闭按钮。我做了Polygon
Polygon closePol = new Polygon(
new int[] {getWidth() - 25, getWidth(), getWidth(), getWidth() - 25},
new int[] {0, 0, 25, 25}, 4);
当我这样做时,g.fillPolygon(closePol);
没有任何反应,但是当我这样做时
g.fillPolygon(new int[] {getWidth() - 25, getWidth(), getWidth(), getWidth() - 25},
new int[] {0, 0, 25, 25}, 4);` ,
我看到一个多边形。为什么第一个不工作?
答案 0 :(得分:3)
问题可能是getWidth()
中的closePol
被调用到paintComponent
方法的范围之外,因此当前宽度不是尚未帐户(或可能仍为零),这可能是由于一些原因而发生的。
作为一般规则,在绘画时,您需要在getWidth()/getHeight()
方法中调用paint[Component]()
。例如,在展开框架时,如果未使用该方法调用getWidth()
,则不会考虑新宽度,并且不会动态调整图形大小(如果这是您想要的。
在进行自定义绘画时,您还需要考虑覆盖getPreferredSize()
,以便为面板提供一些尺寸提示。