import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
public class keylistener extends JFrame{
public keylistener() {
setTitle("健盘事件");
setBounds(100,100,600,200);
Container c = getContentPane();
JTextField tf = new JTextField();
c.setLayout(new BorderLayout());
c.add(tf, BorderLayout.NORTH);
JPanel pp= new JPanel();
pp.setLayout(new FlowLayout(1,10,3));
JButton a1 = new JButton("A");
JButton b1 = new JButton("B");
JButton c1 = new JButton("C");
JButton d1 = new JButton("D");
JButton e1 = new JButton("E");
JButton f1 = new JButton("F");
JButton g1 = new JButton("G");
JButton h1 = new JButton("H");
JButton i1 = new JButton("I");
JButton j1 = new JButton("J");
JButton k1 = new JButton("K");
JButton l1 = new JButton("L");
JButton m1 = new JButton("M");
JButton n1 = new JButton("N");
JButton o1 = new JButton("O");
JButton p1 = new JButton("P");
JButton q1 = new JButton("Q");
JButton r1 = new JButton("R");
JButton s1 = new JButton("S");
JButton t1 = new JButton("T");
JButton u1 = new JButton("U");
JButton v1 = new JButton("V");
JButton w1 = new JButton("W");
JButton x1 = new JButton("X");
JButton y1 = new JButton("Y");
JButton z1 = new JButton("Z");
pp.add(a1);
pp.add(b1);
pp.add(c1);
pp.add(d1);
pp.add(e1);
pp.add(f1);
pp.add(g1);
pp.add(h1);
pp.add(i1);
pp.add(j1);
pp.add(k1);
pp.add(l1);
pp.add(m1);
pp.add(n1);
pp.add(o1);
pp.add(p1);
pp.add(q1);
pp.add(r1);
pp.add(s1);
pp.add(t1);
pp.add(u1);
pp.add(v1);
pp.add(w1);
pp.add(x1);
pp.add(y1);
pp.add(z1);
c.add(pp, BorderLayout.CENTER);
List<JButton> list = new ArrayList<>();//创建List集合
Component item[] = pp.getComponents();//获取面板中所有组件
for (Component d:item){
if(d instanceof JButton){//判断组件是否是按钮
list.add((JButton)d);//添加到集合中
}
}
tf.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
char ch = e.getKeyChar();//获取按下的健的字符
for (JButton btn:list){
String keytext = btn.getText();//获取按钮的字符内容
if(keytext.equalsIgnoreCase(String.valueOf(ch))){//比较按下的健与按钮的内容是否一
btn.setBackground(Color.white);
}
}
}
public void keyPressed(KeyEvent e) {
char ch = e.getKeyChar();
for (JButton btn:list){
String keytext = btn.getText();
if(keytext.equalsIgnoreCase(String.valueOf(ch))){
btn.setBackground(Color.green);
}
}
}
});
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new keylistener();
}
}
问题是Component item[] = pp.getComponents();这句中,之前和视频中一样用获取容器中所有组件的方法,即改成了c.getComponents().运行按健没有反应了,!!,改成面板的pp才变色,想不通了。请教一下。