日期:2014-05-20  浏览次数:20731 次

我的老师都不能搞定。来看看什么问题
题目:编写程序:自定义一个类,继承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)));
            }

        }