Java画线并按键改变颜色

标签 java awt paint

我正在尝试画一条线,并在每次按“c”时改变颜色。我有 5 个 boolean 变量

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() 方法中,我检查上面的 boolean 值,如果它们为真,我就会改变颜色。

第一次,在计数器重置之前,我可以很好地改变颜色,但计数器重置后,我的颜色不会改变。我将在这里写下到底发生了什么:

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;
        }
}

最佳答案

您将所有颜色设置为真,没有假,因此您最终会一遍又一遍地绘制同一条线,最终,您看到的唯一颜色是黑色。一种解决方案是在按键方法中将所有 boolean 值设置为 false,然后仅将正确的 boolean 值设置为 true。

我自己会通过使用颜色数组或 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,而不是 Paint。

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

关于Java画线并按键改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34454626/

相关文章:

Java 可以使用 GridBagLayout 来组织 CardLayout 中使用的 JPanel

java - 如何在 Canvas 上绘制多个圆圈?

java - 绘制在 android 8.0 上无法运行的其他应用程序

java - 使用apache普通文件上传获取上传文件绝对位置

java - 垃圾收集工作正常进行

android - 在 Android 上使用透明绘画绘图

Android密度绘画StrokeWidth计算

java - 如何使 Java 文件选择器显示在 NetBeans 界面前面?

java - 如何在到达指定位置后旋转矩形?

java - 如何获取调整大小的BufferedImage