获取JPanel图形颜色始终是相同的颜色

时间:2012-12-08 00:17:43

标签: java swing

我有一个垂直颜色条,它有7种主要颜色,都作为渐变组合。然后我把它画成JPanel像这样:

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D)g;
    int w = getWidth();
    int h = getHeight();

    Point2D start = new Point2D.Float(0, 0);
    Point2D end = new Point2D.Float(0, h);
    float[] dist = {
        0.02f,
        0.28f,
        0.42f,
        0.56f,
        0.70f,
        0.84f,
        1.0f
    };

    Color[] colors = {
        Color.red,
        Color.magenta,
        Color.blue,
        Color.cyan,
        Color.green,
        Color.yellow,
        Color.red
    };

    LinearGradientPaint p = new LinearGradientPaint(start, end, dist, colors);

    g2d.setPaint(p);
    g2d.fillRect(0, 0, w, h);
}

然后我在同一个类中有一个click事件,如下所示:

public void mouseClick(MouseEvent evt){
    BufferedImage img = (BufferedImage)this.createImage(getWidth(), getHeight());
    int[] colors = new int[3];
    int x = evt.getX();
    int y = evt.getY();
    img.getRaster().getPixel(evt.getX(), evt.getY(), colors);
    ColorPickerDialog.sldColor = new Color(colors[0], colors[1], colors[2]);
    getParent().invalidate();
    getParent().repaint();
}

img.getRaster().getPixel(evt.getX(), evt.getY(), colors);行始终返回RGB颜色:

  • 240
  • 240
  • 240

我可以点击任何地方,红色,黄色,绿色,青色等,我总是会回复那些RGB颜色。为什么呢?

2 个答案:

答案 0 :(得分:3)

我想我看到了问题。这条线

img.getRaster().getPixel(evt.getX(), evt.getY(), colors);

返回与RGB颜色对应的int []。 getPixel方法将数组作为 一个参数,但它返回自己的数组。它实际上从未接触到你的阵列。你想做的就是这个。

int[] colors = img.getRaster().getPixel(evt.getX(), evt.getY(), new int[3]);

应该在数组中存储方法的返回值,而不是它的默认值。

答案 1 :(得分:0)

我明白了!

我替换了这一行:

BufferedImage img = (BufferedImage)this.createImage(getWidth(), getHeight());

有了这个:

BufferedImage img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = img.createGraphics();
this.paint(g);

现在它完美无缺!