Java画线和按键改变颜色

Posted

技术标签:

【中文标题】Java画线和按键改变颜色【英文标题】:Java draw line and pressKey to change color 【发布时间】:2016-03-31 00:10:00 【问题描述】:

例如,我正在尝试画一条线,并在每次按“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;
        

【问题讨论】:

【参考方案1】:

您将所有颜色都设置为 true 并且没有设置为 false,因此您最终会一遍又一遍地绘制同一条线,最终您看到的唯一颜色是黑色。一种解决方案是在您的按键方法中将所有布尔值设置为 false,然后只将正确的布尔值设置为 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的paint方法!

【讨论】:

是的,我看到了你的第一条评论,我做到了!现在它可以工作了,非常感谢你,圣诞快乐! :) @ClaudiuM:不客气。请不要编辑答案。【参考方案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

【讨论】:

我看过@Hovercraft Full Of Eels 的评论,我把它完全像这样:)。感谢你的回复 !成功了,圣诞快乐! 更简单的方法是在块的开头将所有 xxxxColor 变量设置为 false,并且仅设置正确的变量为 true。这将大大缩短此代码,但 1+ 用于识别错误。 谢谢,是的,我可以看到你的代码更好。

以上是关于Java画线和按键改变颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中使鼠标点击时颜色改变?

MFC图形绘制_颜色改变

自定义的view如何在单击时候改变背景颜色

为啥我在 UIView 上画线时需要背景颜色?

Unity-Linerenderer画线功能

如何在闪亮的应用程序中用颜色画线