当前位置: 代码迷 >> J2SE >> 我的老师都不能搞定。来看看什么有关问题
  详细解决方案

我的老师都不能搞定。来看看什么有关问题

热度:63   发布时间:2016-04-24 12:19:27.0
我的老师都不能搞定。来看看什么问题
题目:编写程序:自定义一个类,继承Frame,创建该类对象,并在其上添加1个标签,标签上初始文字为“A”,当按下键盘的向右方向键时,其文字变为“B”,以此类推,当按下左方向键时,则分别变为当前字母的前一字母。
代码:
Java code
import java.awt.*;import java.awt.event.*;public class Java extends Frame implements KeyListener{    static Label l= new Label("A");        public static void main(String args[]) {        Java j = new Java();        l.addKeyListener(j);        j.setSize(200,200);        j.add(l);        j.setVisible(true);    }            public void keyPressed(KeyEvent e)         {            if (e.getKeyCode()==e.VK_LEFT) {                l.setText("B");            }                if(e.getKeyCode()==e.VK_RIGHT) {                l.setText("A");            }                         }    public void keyTyped(KeyEvent e) {    }    public void keyReleased(KeyEvent e) {    }}

哪里出错了?

------解决方案--------------------
static Label l= new Label("A");
改为
static JTextField l= new JTextField("A");

Label 不能获取焦点,没有key事件
------解决方案--------------------
看着代码是没有问题的,等大神出现
------解决方案--------------------
你添加的侦听有问题,对一个可以接受输入的组件添加侦听,下面已经实现了左右键控制标签显示A B,剩下业务逻辑你自己实现吧
Java code
import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Java extends JFrame implements KeyListener{    static JLabel l= new JLabel("A");    static JTextField tf=new JTextField(15);    public static void main(String args[]) {        Java j = new Java();        j.setSize(200,200);        j.getContentPane().setLayout(new FlowLayout());        j.getContentPane().add(l);        j.getContentPane().add(tf);        tf.addKeyListener(j);        j.setVisible(true);        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }        public void keyPressed(KeyEvent e){            if (e.getKeyCode()==KeyEvent.VK_LEFT) {                System.out.println("-------");                l.setText("B");                            }            if(e.getKeyCode()==KeyEvent.VK_RIGHT) {                l.setText("A");            }        }    public void keyTyped(KeyEvent e) {//        System.out.println("-------");    }    public void keyReleased(KeyEvent e) {//        System.out.println("-------");    }}
------解决方案--------------------
探讨
l.addKeyListener(j);

------解决方案--------------------
把label放到JPanel里,给JPanel添加事件
------解决方案--------------------
探讨

引用:
l.addKeyListener(j);

改成
j.addKeyListener(j);

道理是1楼说的。

------解决方案--------------------
l.setFocusable(true);
------解决方案--------------------
添加一个键盘监听事件,由键盘触发时,,,,,对Label做响应.设置植!!!
------解决方案--------------------
大牛们,你们把需求理解错误了。楼主应该是想要按右键,当前字符+1,比如A变成B,B变成C。按左键则少1。
Java code
public void keyPressed(KeyEvent e){            if (e.getKeyCode()==KeyEvent.VK_LEFT) {                System.out.println("-------");                String txt = l.getText();                char c = txt.charAt(0);                if(!txt.equals("A"))                    l.setText(String.valueOf((char)(c-1)));                            }            if(e.getKeyCode()==KeyEvent.VK_RIGHT) {                String txt = l.getText();                char c = txt.charAt(0);                if(!txt.equals("Z"))                    l.setText(String.valueOf((char)(c+1)));            }        }
  相关解决方案