永发信息网

java语言程序设计(第二版) 中国铁道出版社 第11章课后第三题

答案:1  悬赏:50  手机版
解决时间 2021-07-25 18:04
  • 提问者网友:心如荒岛囚我终老
  • 2021-07-25 06:45

一个窗口包含文本行和标签,在文本行中输入一段文字兵按回车键后,这段文字将显示在标签上。

我这个错在哪里?

package C;
import java.awt.*;
import java.awt.event.*;
public class KeyEvent extends Frame implements KeyListener
{
static KeyEvent frm = new KeyEvent();
static TextField tf;
static Label l;
public static void main(String args[])
{


frm.setTitle("习题3");
frm.setSize(250, 150);
frm.setLayout(new FlowLayout());
tf = new TextField(20);
l= new Label();
tf.addKeyListener(frm);
frm.add(tf);
frm.add(l);
frm.setVisible(true);
}

public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
{
l.setText(tf.getText());
}
}
}

最佳答案
  • 五星知识达人网友:底特律间谍
  • 2021-07-25 07:19

您的程序存在两个大问题和一个小问题:


第一个大问题是您的class名称定为KeyEvent,与Java本身所有的java.awt.event.KeyEvent冲突。如果非要如此命名也不是不可以,但是您的keyPressed程序段又确实用到了java.awt.event的KeyEvent,所以程序无法编译。比较干净的解决方法是更改您的class名称,如果实在想保留KeyEvent为您的class名称,那么在用到java.awt.event的KeyEvent的时候需要加全名:


public void keyPressed(java.awt.event.KeyEvent e)

{


if(e.getKeyCode()==java.awt.event.KeyEvent.VK_ENTER)

{


l.setText(tf.getText());

}


}



第二个大问题是您的KeyEvent定义implements KeyListener,那么除了keyPressed之外,您还必须有keyReleased 和keyTyped 的定义:


public void keyReleased(java.awt.event.KeyEvent arg0) {

// TODO Auto-generated method stub


}



public void keyTyped(java.awt.event.KeyEvent arg0) {

// TODO Auto-generated method stub


}



一个小问题是您没有加WindowListener,所以窗口显示之后不能关掉(只能从IDE或是command line退出)。建议您加上以下代码:


frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯