运行paint方法时的默认颜色是什么

时间:2014-04-13 03:15:18

标签: java swing paint

我用这种绘画方法画一个条形图,条形图是深灰色。我只想知道当我来回变换时如何恢复颜色?

是否有Color.DEFAULT或类似的东西? 或者我应该在循环之前设置setColor

public void paint(Graphics g) {
    super.paint(g);
    for (int i = 0, k = 0; i < barsArray.length; i++, k += getWidth()
        / barsArray.length) {
        g.fillRect(k + 5, getHeight() - barsArray[i] * 15, getWidth()
            / barsArray.length - 1, getHeight() * 2);
    }
}

2 个答案:

答案 0 :(得分:7)

您可以在更改之前使用g.getColor()

可能不适合覆盖paint,相反,您应该考虑覆盖从paintComponent

延伸的类的JComponent

请查看Performing Custom Painting了解详情

答案 1 :(得分:0)

您不应该“只是setColor ...”,因为您作为参数接收的Graphics对象由组件层次结构共享到包含它的窗口。

您有两种选择(基本上):

  1. 将当前颜色存储到变量中,并在完成后将其恢复(如果对Graphics对象进行的状态更改很少,则最好):
  2. Color oldColor = g.getColor();

    // do something with g

    g.setColor(oldColor);

    1. 克隆图形对象并在完成后处理克隆(最好是对Graphics对象进行大量状态更改):
    2. Graphics gCopy = g.create();

      // do something with gCopy

      gCopy.dispose();