这是我第一次在 stackoverflow 上提问,所以请告诉我我是否做错了什么。
我正在编写一个实现按键监听器的程序,我试图让它根据按下的键来改变颜色。 (参见下面的代码)但是,它不会改变颜色,但它仍然记录按键操作。 我尝试测试的方法是使用“b”键,如代码中所示。 提前致谢。
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
class Spring extends JPanel implements KeyListener {
private char f = 'a';
private int a = 0, b = 0, c = 0;
private Color flower = new Color(a,b,c);
public Spring() { //Constructor
this.setPreferredSize(new Dimension(500, 500));
addKeyListener(this);
}
public void addNotify() { //the focus
super.addNotify();
requestFocus();
}
public void paintComponent(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight()); //clear before next press
g.drawString("the key that pressed is " + f, 0, 10);
g.setColor(flower);
Polygon flowa = new Polygon();
flowa.addPoint(220,270);
flowa.addPoint(250,300);
flowa.addPoint(270,270);
flowa.addPoint(250,300);
g.fillPolygon(flowa);
g.fillRect(250,300,30,30);
}
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) { //when key is typed, do something
f = e.getKeyChar(); //modify value of f
switch (f){
case 'a':
a = 10;
b = 10;
c = 10;
case 'b':
a = 223;
b = 45;
c = 45;
System.out.println("Bals");
case 'c':
a = 10;
b = 10;
c = 10;
case 'd':
a = 10;
b = 10;
c = 10;
case 'e':
a = 10;
b = 10;
c = 10;
case 'f':
a = 10;
b = 10;
c = 10;
case 'g':
a = 10;
b = 10;
c = 10;
case 'h':
a = 10;
b = 10;
c = 10;
case 'i':
a = 10;
b = 10;
c = 10;
case 'j':
a = 10;
b = 10;
c = 10;
case 'k':
a = 10;
b = 10;
c = 10;
case 'l':
a = 10;
b = 10;
c = 10;
case 'm':
a = 10;
b = 10;
c = 10;
}
repaint();
}
public static void main(String[] s) { //main method, creates the frame
JFrame f = new JFrame();
f.getContentPane().add(new Spring());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
最佳答案
您只需设置变量a
、b
和c
。更改这些变量不会更改 flower
使用的数字,因为 flower
使用的是您传入的数字,而不是您正在使用的变量。
您需要在每个实例中创建一个新的 Color
对象,如下所示:
flower = new Color(20, 230, 210);
另外,不要忘记在 case 之间添加 break;
行;否则,您的 flower
对象将是您最后列出的颜色。
此外,您可能想使用 KeyAdapter 的实现类,它允许您仅定义要使用的方法而不是所有方法,而不用拥有自己的类KeyListener
。
关于Java KeyListener,尝试根据按下的键改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676515/