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画线和按键改变颜色的主要内容,如果未能解决你的问题,请参考以下文章