【问题标题】:Graphics2D fillPolygonGraphics2D 填充多边形
【发布时间】:2014-05-01 21:51:06
【问题描述】:

我正在尝试在未装饰的 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);` , 

我看到一个多边形。为什么第一个不起作用?

【问题讨论】:

  • getWidth() 的价值是多少?我打赌不是 25 岁。
  • @MartinCarney 是 500
  • 一个疯狂的猜测:可能是您创建多边形的位置与绘制它的位置不同。如果是这种情况,则可能是当您创建它时,getWidth() 方法仍然返回 0,因为该组件尚不可见。有疑问,发stackoverflow.com/help/mcve
  • 实际的runnable example that demonstrates your problem 将涉及更少的猜测工作和更好的响应

标签: java swing graphics jframe polygon


【解决方案1】:

问题很可能是closePol中的getWidth()paintComponent方法的范围之外被调用,所以当前的宽度还没有考虑到(或者可能仍然是零),这可能由于几个原因而发生。

作为一般规则,在绘画时,您需要在paint[Component]() 方法中调用getWidth()/getHeight()。例如在扩展框架时,如果不使用该方法调用getWidth(),则不会考虑新的宽度,并且不会动态调整图形大小(如果这是你想要的。

在进行自定义绘画时,您还需要考虑覆盖 getPreferredSize(),以便为面板提供一些尺寸提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多