Java KeyListener,尝试根据按下的键改变颜色

标签 java swing jpanel keylistener

这是我第一次在 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);
    }
}

最佳答案

您只需设置变量abc。更改这些变量不会更改 flower 使用的数字,因为 flower 使用的是您传入的数字,而不是您正在使用的变量。

您需要在每个实例中创建一个新的 Color 对象,如下所示:

flower = new Color(20, 230, 210);

另外,不要忘记在 case 之间添加 break; 行;否则,您的 flower 对象将是您最后列出的颜色。

此外,您可能想使用 KeyAdapter 的实现类,它允许您仅定义要使用的方法而不是所有方法,而不用拥有自己的类KeyListener

关于Java KeyListener,尝试根据按下的键改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676515/

相关文章:

java - 阻塞线程的调用方法

java - 访问应用程序特定的 url 时,Spring security oauth 中出现 403 错误(access_token 有效且 csrf 已禁用)

java - 在 hibernate 中使用组合键扩展实体类

java - 尝试使用变量元素名称打印 XSLT 中的节点值

java - Jtable 单元格上的 Jbutton 只能工作一次

java - 将 JLayeredPane 添加到 JPanel

Java Swing 背景图像重复和最大化窗口

java - Swing 组件 setSize()/setBounds() 问题

java - 将 JPanel 的背景图像设置为 TILED 时应用程序失败

java - 为什么我的 RadioButtons 和 JLabels 没有显示?