gpt4 book ai didi

java - 如何简单地实现一个 KeyListener?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:37 24 4
gpt4 key购买 nike

public class MyPanel extends JPanel implements KeyListener {
private char c = 'e';
public MyPanel() {
this.setPreferredSize(new Dimension(500,500));
addKeyListener(this);
}
public void paintComponent(Graphics g) {
super.repaint();
g.drawString("the key that pressed is" + c, 250,250);
}

public void keyPressed(KeyEvent e) {
c=e.getKeyChar();
repaint();

}

public void keyReleased(KeyEvent e) {
}


public void keyTyped(KeyEvent e) {
c=e.getKeyChar();
repaint();
}

public static void main(String[] s) {
JFrame f=new JFrame();
f.getContentPane().add(new MyPanel());
f.pack();
f.setVisible(true);
}
}

我尝试阅读 this但是并没有理解如何简单地实现 KeyListener。那么我需要更改什么才能使其正常工作?

最佳答案

以下是它不起作用的原因:

  1. JPanel 没有键盘焦点。 (框架有它。)当面板添加到屏幕时,您可能想要 requestFocus

  2. 当图形发生变化时,您需要调用repaint

  3. 您不能在 paintComponent 方法中调用 repaint

  4. 您需要在再次绘制字符串之前清空绘图区域(否则所有字符最终将彼此重叠)。

这是一个完整的工作示例:

class MyPanel extends JPanel implements KeyListener {
private char c = 'e';

public MyPanel() {
this.setPreferredSize(new Dimension(500, 500));
addKeyListener(this);
}

public void addNotify() {
super.addNotify();
requestFocus();
}

public void paintComponent(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
g.drawString("the key that pressed is " + c, 250, 250);
}

public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) {
c = e.getKeyChar();
repaint();
}

public static void main(String[] s) {
JFrame f = new JFrame();
f.getContentPane().add(new MyPanel());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}

哦,您可能想要添加 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 以使应用程序在您关闭窗口时终止。 :-)

关于java - 如何简单地实现一个 KeyListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9333876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com