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