首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

键盘监听不成功,该怎么处理

2012-12-24 
键盘监听不成功,该怎么办我定义了Button组建和键盘监听button的监听可以实现,但键盘的监听却实现不了代码

键盘监听不成功,该怎么办
我定义了Button组建和键盘监听
button的监听可以实现,但键盘的监听却实现不了
代码如下
入口函数的类:

import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Control_UI10 extends JFrame {
/**
 * @author lyy
 * 
 */
private static final long serialVersionUID = -37927920298166521L;
private JFrame frame;
JTextField show = new JTextField(10);
Box vtempall = Box.createVerticalBox();
Box midsize = Box.createHorizontalBox();
Box midsize1 = Box.createHorizontalBox();

public static void main(String[] args) {
new Control_UI10();
}

public Control_UI10() {
frame = new JFrame();
frame.setTitle("小车控制");
frame.setLocation(300, 150);
frame.setSize(780, 470);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
// this.setResizable(false);
frame();
// 为窗口增加这个事件
MYKeyLisenter my = new MYKeyLisenter();
frame.addKeyListener(my);
frame.setVisible(true);
}

public void frame() {

// 添加status()类
midsize.add(new status().Status());
// 添加Myview()
midsize.add(new Myview().view());
vtempall.add(midsize);
// 添加control()类
midsize1.add(new control().Control());
// 添加hearing()类
midsize1.add(new hearing().Hearing());
vtempall.add(midsize1);
show.setEditable(false);
show.setText("链接状态:");
vtempall.add(show, BorderLayout.NORTH);
frame.add(vtempall);

}

// 创建键盘监听
public class MYKeyLisenter extends KeyAdapter {
@Override
public void keyPressed(KeyEvent ef) {
super.keyPressed(ef);
switch (ef.getKeyCode()) {
case KeyEvent.VK_UP:
System.out.println("上");
break;
case KeyEvent.VK_DOWN:
System.out.println("下");
break;
case KeyEvent.VK_LEFT:
System.out.println("左");
break;
case KeyEvent.VK_RIGHT:
System.out.println("右");

break;
}
}
}
}


control类
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

public class control extends JFrame {
private static final long serialVersionUID = 5388121425052483138L;
JButton leye, reye, up, down, left, right, sound, controls, connet;
Box control;
Box vtemp1, htemp4, htemp5, htemp6;
JComboBox jcb;
// ActionListener mb;
JFrame jFrame1;

public static void main(String[] args) {
new control();
}

public control() {
jFrame1 = new JFrame("control");
jFrame1.setLocation(73, 100);


jFrame1.setSize(850, 450);
jFrame1.setDefaultCloseOperation(EXIT_ON_CLOSE);
Control();
// 不要下面这句话,否则它界面会在Control_UI09显示
// jFrame1.setVisible(true);
}

public Component Control() {
MyButtonLisenter mb = new MyButtonLisenter();
// 创建标题和边框
control = Box.createHorizontalBox();
control.setBorder(new TitledBorder(new EtchedBorder(), "控制",
TitledBorder.LEFT, TitledBorder.TOP));
// 创建按钮
leye = new JButton("左视");
leye.addActionListener(mb);
reye = new JButton("右视");
reye.addActionListener(mb);
up = new JButton("前进");
up.addActionListener(mb);
down = new JButton("后退");
down.addActionListener(mb);
left = new JButton("向左");
left.addActionListener(mb);
right = new JButton("向右");
right.addActionListener(mb);
// 创建 JComboBox
String chances[] = new String[] { "蓝牙", "wifi" };
jcb = new JComboBox(chances);
MyCombxoboxlisenter mc = new MyCombxoboxlisenter();
jcb.addItemListener(mc);

vtemp1 = Box.createVerticalBox();
htemp4 = Box.createHorizontalBox();
htemp5 = Box.createHorizontalBox();
htemp6 = Box.createHorizontalBox();
// 创建按钮
htemp4.add(leye);
htemp4.add(Box.createHorizontalStrut(10));
htemp4.add(up);
htemp4.add(Box.createHorizontalStrut(10));
htemp4.add(reye);
htemp4.add(Box.createHorizontalStrut(10));
htemp4.add(new JLabel("端口:"));
htemp4.add(Box.createHorizontalStrut(152));
htemp5.add(left);
htemp5.add(Box.createHorizontalStrut(10));
htemp5.add(down);
htemp5.add(Box.createHorizontalStrut(10));
htemp5.add(right);
htemp5.add(Box.createHorizontalStrut(10));
htemp5.add(jcb);

sound = new JButton("寻声");
sound.addActionListener(mb);
controls = new JButton("控制");
controls.addActionListener(mb);
connet = new JButton("连接");
connet.addActionListener(mb);
htemp6.add(sound);
htemp6.add(Box.createHorizontalStrut(10));
htemp6.add(controls);
htemp6.add(Box.createHorizontalStrut(10));
htemp6.add(connet);
htemp6.add(Box.createHorizontalStrut(190));

vtemp1.add(Box.createVerticalStrut(20));
vtemp1.add(htemp4);
vtemp1.add(Box.createVerticalStrut(10));
vtemp1.add(htemp5);
vtemp1.add(Box.createVerticalStrut(10));
vtemp1.add(htemp6);
vtemp1.add(Box.createVerticalStrut(20));

control.add(vtemp1);
return jFrame1.add(control);
}

public class MyButtonLisenter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// 创建摄像头的左视
if (e.getSource() == leye) {
System.out.println("左视");
} else if (e.getSource() == reye) {

System.out.println("右视");
} else if (e.getSource() == sound) {
System.out.println("循声");
} else if (e.getSource() == controls) {
System.out.println("控制");
} else if (e.getSource() == connet) {
System.out.println("连接");
}
}

}

public class MyCombxoboxlisenter implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
JComboBox jcb = (JComboBox) e.getSource();


if (e.getStateChange() == ItemEvent.SELECTED) {
// 用文本文件来监视滑动条是否监听成功

// 得到下级菜单的菜单名
// System.out.println((String) (jcb.getSelectedItem()));
// 得出下级菜单的数组名
// System.out.println(jcb.getSelectedIndex());
} else if ("蓝牙".equals(jcb.getSelectedItem())) {
System.out.println("蓝牙");
} else if ("wifi".equals(jcb.getSelectedItem())) {
System.out.println("wifi");
}
}
}

}



status类
import java.awt.Component;

import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class status extends JFrame {

private static final long serialVersionUID = -5318795786765438860L;
private Box vtemp, htemp1, htemp2, htemp3;
JSlider jsl, jsl2, jsl3;
private JTextField jt1, jt2, jt3;
// private JPanel status;
ChangeListener listener;
JFrame jFrame;

public static void main(String[] args) {
new status();
}

public status() {
jFrame = new JFrame("Status");
jFrame.setLocation(73, 100);
jFrame.setSize(850, 450);
jFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
Status();
// 不要下面这句话,否则它界面会在Control_UI09显示
// jFrame.setVisible(true);
}

public Component Status() {
// SliderListening listener = new SliderListening();
listener = new ChangeListener() {

public void stateChanged(ChangeEvent e) {
// 不能写上下面这句话,否则每次监听都要建立新的STATUS,会无限循环
// status st = new status();
if (e.getSource() == jsl) {
System.out.println("左轮");
} else if (e.getSource() == jsl2) {
System.out.println("右轮");
} else if (e.getSource() == jsl3) {
System.out.println("声音");
}
// 用文本文件来监视滑动条是否监听成功
// JSlider soure = (JSlider) e.getSource();
// new Control_UI09().show.setText("当前滑动条的值为:" +
// soure.getValue());
}
};
// 创建标题
vtemp = Box.createVerticalBox();
vtemp.setBorder(new TitledBorder(new EtchedBorder(), "状态",
TitledBorder.LEFT, TitledBorder.TOP));
jsl = new JSlider(0, 10);
Addjslider(jsl, 5, 1);
jsl2 = new JSlider(0, 10);
Addjslider(jsl2, 5, 1);
jsl3 = new JSlider(0, 10);
Addjslider(jsl3, 5, 1);
jt1 = new JTextField(10);
AddJTF(jt1, "电压:");
jt2 = new JTextField(10);
AddJTF(jt2, "温度:");
jt3 = new JTextField(10);
AddJTF(jt3, "距离:");

htemp1 = Box.createHorizontalBox();
AddTemp(htemp1, jt1, jsl, "左轮速度");
htemp2 = Box.createHorizontalBox();
AddTemp(htemp2, jt2, jsl2, "右轮速度");
htemp3 = Box.createHorizontalBox();
AddTemp(htemp3, jt3, jsl3, "声音        ");


// 先建一个大的盒子vtemp
// 然后再在vtemp里加jtemp2等等
vtemp.add(Box.createVerticalStrut(20));
vtemp.add(htemp1);
vtemp.add(Box.createVerticalStrut(10)); // 创建上下空间距离
vtemp.add(htemp2);
vtemp.add(Box.createVerticalStrut(10));
vtemp.add(htemp3);
vtemp.add(Box.createVerticalStrut(20));

// status.add(vtemp);
// 进行Component返回
return jFrame.add(vtemp);
}

// 创建文本框
public void AddJTF(JTextField jtf, String str) {
jtf.setEditable(false);
jtf.setText(str);
}

// 创建滑动条
public void Addjslider(JSlider Jsl, int max, int min) {
Jsl.setOrientation(SwingConstants.HORIZONTAL);
Jsl.setPaintTicks(true);
Jsl.setMajorTickSpacing(5);
Jsl.setMinorTickSpacing(1);
Jsl.setPaintLabels(true);
Jsl.addChangeListener(listener);
}

// 创建每盒子
public void AddTemp(Box box, JTextField jtf, JSlider jsl, String str) {
box.add(jtf);
box.add(Box.createHorizontalStrut(10)); // 创建textFied和slider之间的距离
box.add(new JLabel(str));
box.add(jsl);
}

}




[解决办法]
JTextArea textArea = new JTextArea(3, 30);
frame.add(textArea);
MYKeyLisenter my = new MYKeyLisenter();
textArea.addKeyListener(my);


键盘,必须是能输入的地方才会监听键盘,你弄个输入框,就可以侦听了。

热点排行