我正在尝试绘制一条线,并且每次按'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;
}
}
答案 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