Java绘制线和pressKey改变颜色

时间:2015-12-24 15:02:04

标签: java awt paint

我正在尝试绘制一条线,并且每次按'c'时都会改变颜色。我有5个布尔变量

boolean redColor = false;   
boolean blueColor = false; 
boolean greenColor = false;
boolean yellowColor = false;
boolean defaultColor = false;   

我有一个变量int counter = 0,我用它来增加函数keyPressed(KeyEvent e)。因为我有5个变量,当计数器达到值6时,我重置计数器并从1再次开始,红色。在paint()方法中,我检查上面的那些布尔值,如果它们是真的,我改变颜色。

第一次,直到计数器重置,我可以改变颜色,但在计数器重置后,我的颜色不会改变。我将在这里写下它究竟发生了什么:

counter = 1 => color red   
counter = 2 => color blue    
counter = 3 => color green   
counter = 4 => color yellow    
counter = 5 => color black(default)
counter = 6 => reset color back to 1   

直到这里一切正常,但是当计数器重置并再次递增时,对于任何计数器值,颜色仍然相同,为黑色。
我会在这里写一部分代码,也许不是最好的方法,但我是AWT的新手。我想用awt来做这件事。感谢您阅读我的帖子。

public void paint(Graphics g)
    {
        if(mousePressed == true)
        {
            g.drawLine(x1,y1,x2,y2);    
             if(redColor == true)
            {
                g.setColor(Color.RED);
                g.drawLine(x1,y1,x2,y2);    
            }
            if(blueColor == true)
            {
                g.setColor(Color.BLUE);
                g.drawLine(x1, y1, x2, y2);
            }
            if(greenColor == true)
            {
                g.setColor(Color.GREEN);
                g.drawLine(x1, y1, x2, y2);
            }
            if(yellowColor == true)
            {
                g.setColor(Color.YELLOW);
                g.drawLine(x1, y1, x2, y2);
            }
            if(defaultColor == true)
            {
                g.setColor(Color.BLACK);
                g.drawLine(x1, y1, x2, y2);
            }
        }
    }



public void keyPressed(KeyEvent e)
{
        if(e.getKeyChar() == 'c')
        {
            counter ++;
            if(counter == 1)
                redColor = true;
            if(counter == 2)
                blueColor = true;
            if(counter == 3)
                greenColor = true;
            if(counter == 4)
                yellowColor = true;
            if(counter == 5)
            {
                defaultColor= true;
            }
            else if(counter == 6)
                counter = 1;
        }
}

2 个答案:

答案 0 :(得分:3)

您将所有颜色设置为true且不设置为false,因此您最终会反复绘制相同的线条,最终,您看到的唯一颜色是黑色。解决方案是在按下的键方法中将所有布尔值设置为false,然后仅将正确的布尔值设置为true。

我自己通过使用Color的数组或ArrayList,然后递增计数器并从数组中选择正确的项目来做不同的事情。如,

private Color[] colors = { Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW, Color.BLACK };
private int index = 0;
private Color color = Color.BLACK;

public void keyPressed(KeyEvent e) {

    // if correct key pressed:
    if(e.getKeyChar() == 'c') {
        color = colors[index]; // select appropriate color
        repaint();

        index++;
        index %= colors.length;  // set index to 0 if == length of array
     }
}

@Override
public void paint(Graphics g) {
    super.paint(g);   // *** don't forget me! ***
    g.setColor(color);
    // draw line with Color
    g.drawLine(x1, y1, x2, y2);
}

注意这段代码有多简单。

注意,如果这是Swing,你不会使用KeyListeners而是使用KeyBindings,并且你会覆盖paintComponent,而不是绘制。

另外不要忘记调用super的paint方法!

答案 1 :(得分:2)

将其他颜色设置为false,否则最终所有颜色都为true,这就是首次运行后它为黑色的原因。

        if(counter == 1)
            redColor = true;
            blueColor = false;
            greenColor = false;
            yellowColor = false;
            blackColor = false;
        if(counter == 2)
            redColor = false;
            blueColor = true;
            greenColor = false;
            yellowColor = false;
            blackColor = false;
        if(counter == 3)
            //.....and so on