Ofe*_*Ron 6 java swing keylistener
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试阅读这个但没有管理以了解如何简单地实现KeyListener.那么我需要改变什么呢?
aio*_*obe 10
以下是它不起作用的原因:
在JPanel没有键盘焦点.(框架有它.)您可能希望requestFocus将面板添加到屏幕时.
您需要repaint在图形更改时调用.
你不能打电话repaint给paintComponent方法.
您需要在再次绘制字符串之前清除绘图区域(否则所有字符将最终在彼此之上).
这是一个完整的工作示例:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
哦,您可能希望添加f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)以在关闭窗口时终止应用程序.:-)
| 归档时间: |
|
| 查看次数: |
48742 次 |
| 最近记录: |