package com.java.keyevnet;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class KeyExample1 extends JFrame
{
String s="mali";
JPanel testPanel2 = new KeyPanel();
private JLabel keyLabel = new JLabel();

public static void main(String[] args)
{
JFrame win = new KeyExample1();
win.setVisible(true);
}
public KeyExample1()
{
setSize(320,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
JPanel testPanel = new JPanel();
//若将上面的语句改为下面的形式,则无法接收键盘事件
//JPanel testPanel = new JPanel();
testPanel.setBackground(Color.blue);
testPanel.setPreferredSize(new Dimension(50,50));



testPanel2.setBackground(Color.red);
testPanel2.setPreferredSize(new Dimension(1,1));

testPanel2.addKeyListener(new KeyListener()
{
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode(); //得到按键扫描码
keyLabel.setText(KeyEvent.getKeyText(keyCode) //将按键扫描码转化为按键描述字符串
+ "(" + keyCode + ")" +  "(" + e.getKeyChar() + ")" +" -- Pressed.\n");
if(keyCode == KeyEvent.VK_F3 && e.isAltDown()) //按下Alt+F3,程序退出
{
System.exit(0);
}
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}
});
JButton jjd=new JButton("fuck");
testPanel.add(jjd);
contentPane.add(testPanel2,BorderLayout.EAST);
contentPane.add(testPanel,BorderLayout.SOUTH);
contentPane.add(keyLabel,BorderLayout.CENTER); //不能有其他能获得焦点的组件,所以选择使用JLabel,而不使用JTextArea。

jijiao jiji = new jijiao();
Thread t12 = new Thread(jiji);
t12.start();
}

class jijiao implements Runnable {
boolean jijiao = true;
public void run() {
if (jijiao) {

try {
testPanel2.requestFocus();

s=s+"li";

keyLabel.setText(s);
//JOptionPane.showMessageDialog(null, "ActionCommand:jianting");
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}class KeyPanel extends JPanel
{
public boolean isFocusTraversable()
{
return true;
}
}
不看上面的代码也行
本来是一个容器里有多个面板,一个面板里还有多个组键,怎么让一个组件一直聚焦,而接受键盘的输入OR说说别的方法也行

解决方案 »

  1.   

    怎么让一个组件一直聚焦?
    没理解你的意思,多个组件,有一个一直聚焦,那其他组件是什么状态呢?
    你是不是想实现用tab切换组件的焦点?
      

  2.   

    那好说啊,onblur事件中再让他focus聚焦啊, 不过不知道你这样做的意义
      

  3.   


    其实我要做的就是 在很多个组键(面板里面的好多JButton)里面监听 键盘 事件  我只要知道敲的是什么键就行了