我已尝试使用KeyListener interface
在我的框架上绘制一个字符串,这样每当我点击键盘上的可键入键时,它应该出现在帧上,但即使没有错误它也不起作用。
有人能说出这是什么错误吗?
以下是我的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class KeyevntFrame2 extends Frame {
Button b = new Button("ok");
Button b1 = new Button("hey");
char ch;
String s = "";
public KeyevntFrame2() {
setTitle("understand key events");
setSize(800, 600);
addKeyListener(new KeyHandler());
setFont(new Font("Arial", Font.PLAIN, 35));
setForeground(Color.BLACK);
add(b);
add(b1);
b.setBounds(200, 200, 100, 100);
b1.setBounds(200, 700, 100, 100);
setLayout(null);
b.addActionListener(new KeyHandler());
b1.addActionListener(new KeyHandler());
}
class KeyHandler implements KeyListener, ActionListener {
public void keyPressed(KeyEvent e) {
ch = e.getKeyChar();
s = s + ch;
repaint();
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void paint(Graphics g) {
g.drawString(s, 300, 200);
g.setFont(new Font("Arial", Font.PLAIN, 35));
}
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(b1, "thank you for using java");
}
}
public static void main(String a[]) {
KeyevntFrame2 f = new KeyevntFrame2();
f.setVisible(true);
}
}
答案 0 :(得分:1)
Frame
)和Swing(JOptionPane
)组件。选择一个GUI工具包并坚持下去。@Override
表示法。这样做会警告您,KeyListener
和ActionListener
接口都没有定义public void paint(Graphics)
方法!KeyListener
和ActionListener
没有多大意义,并且让您误以为使用组合侦听器调用Button.addActionListener(..)
也会将其添加为KeyListener
。它不会。new Font("Arial", Font.PLAIN, 35)
对于跨平台的健壮性,应该是new Font(Font.SANS_SERIF, Font.PLAIN, 35)
(例如,OS X通常不会安装Arial字体,并且用户更愿意在任何情况下看到Helvetica。)addKeyListener(..)
将无效。最好在任何情况下使用Swing并实现键绑定。