代码如下,文本框却可以监听到回车键,而按钮却监听不到package swt;import java.text.DateFormat;
import java.text.SimpleDateFormat;import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;public class KeyAction {
Display display;
Shell shell;
GridLayout gridLayout;
GridData layoutData;
GridData layoutData2;
Composite composite;
Text sendText;
Text mesText;
Button btok;
DateFormat formatter = new SimpleDateFormat("HH:mm:ss"); public KeyAction() {
display = Display.getDefault();
shell = new Shell(display);
// 初始化shell
initShell(); layoutData = new GridData();
layoutData.widthHint = 260;
layoutData.heightHint = 200;
mesText = new Text(shell, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL
| SWT.BORDER);
mesText.setLayoutData(layoutData); layoutData = new GridData();
layoutData.widthHint = 260;
layoutData.heightHint = 60;
sendText = new Text(shell, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL
| SWT.BORDER);
sendText.setLayoutData(layoutData);
// sendText.setFocus();
btok = new Button(shell, SWT.PUSH);
btok.setText("Button");
layoutData2 = new GridData();
layoutData2.widthHint = 80;
layoutData2.heightHint = 20;
btok.setLayoutData(layoutData2);
btok.setFocus(); btok.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
// 让按键原有的功能失效
e.doit = false;
// 执行你自己的事件
MessageBox box = new MessageBox(new Shell(),
SWT.ICON_INFORMATION | SWT.OK);
box.setText("提示信息");
box.setMessage("按钮按回车键了");
box.open();
}
} public void keyReleased(KeyEvent e) {
}
});
sendText.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
// 让按键原有的功能失效
e.doit = false;
// 执行你自己的事件
MessageBox box = new MessageBox(new Shell(),
SWT.ICON_INFORMATION | SWT.OK);
box.setText("提示信息");
box.setMessage("按回车键了");
box.open();
}
} public void keyReleased(KeyEvent e) {
}
});
} public void open() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} /**
 * 设置窗口的标题、位置、大小、图标
 * 
 * @return Shell
 */
public Shell initShell() {
shell.setText("交谈");
shell.setSize(400, 350);
shell.setLayout(new GridLayout());
return shell;
} /**
 * 向聊天区域添加信息
 * 
 * @param msg
 */
public void addString(String mes) {
mesText.setText(mes + "\n" + mesText.getText());
} public static void main(String[] args) {
new KeyAction().open();
}
}

解决方案 »

  1.   

    JButton组件初始化代码片断:     private void initialize() {        frame = new JFrame();        frame.getContentPane ().setLayout (null);        frame.setBounds (100, 100, 247, 165);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setTitle ("事件驱动程序");        //btnPress就是这次点击操作中的事件源        btnPress = new JButton();        btnPress.setText ("Press");        btnPress.setName ("Press");        btnPress.setBounds (63, 98, 99, 23);        //向事件源btnPress植入侦听器对象ButtonEventHandler        btnPress.addActionListener (new ButtonEventHandler(this));        frame.getContentPane ().add(btnPress);        frame.getContentPane ().add(txtMessage);    }  侦听器创建的代码片断:   //侦听器对象ButtonEventHandler(用来侦听按钮的点击操作)    class ButtonEventHandler implements ActionListener {        //窗体对象        private EventDemo form = null;        //通过构造体传入窗体对象,        //作用在于让侦听器对象明白事件源处于        //哪个窗体容器中        public ButtonEventHandler(EventDemo form) {            this.form = form;        }         //委托方法        public void actionPerformed(ActionEvent e) {           //该方法将会把事件的处理权交给窗体容器类的//btnPress_Click方法处理。            this.form.btnPress_Click(e);        }    }  真正的事件处理代码片断:     /**     * 按钮btnPress的事件处理方法。     *      * @param e 事件参数     */    private void btnPress_Click(ActionEvent e) {                String message = "你点击的按钮名叫:"             + ((JButton) e.getSource()).getName();                this.txtMessage.setText(message);    }本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/frank_softworks/archive/2007/05/29/1629615.aspx
    参考这里
    http://blog.csdn.net/frank_softworks/archive/2007/05/29/1629615.aspx
      

  2.   

    我的是SWT的,楼上给的是swing
      

  3.   

    比如你在两个文本框里都添加一个addActionListener监听   在actionPerformed里面直接写处理的代码  这样当你输完按下回车就会有了   按钮的话也一样 
      

  4.   

    应该是 控件 可能是焦点的原因,当时的焦点在文本框,所以可以执行键盘的按键事件,如果将焦点设置在button上,这个button就可以实现按键事件了。很有可能是这个原因。