一个简单的运用键盘监听创建的java键盘监听模型
我的类名是h2,这个键盘监听展示的是当你按下某个键及松开某个键时,界面所表现出来的变化。
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import javax.swing.text.AbstractDocument.Content;
public class h2 extends JFrame{
JTextField jt;
JLabel lable;
JPanel panel;
JButton btnA;
JButton btnB;
JButton btnC;
JButton btnD;
JButton btnE;
JButton btnF;
JButton btnG;
JButton btnH;
JButton btnI;
JButton btnJ;
JButton btnK;
JButton btnL;
JButton btnM;
JButton btnN;
JButton btnO;
JButton btnP;
JButton btnQ;
JButton btnR;
JButton btnS;
JButton btnT;
JButton btnU;
JButton btnV;
JButton btnW;
JButton btnX;
JButton btnY;
JButton btnZ;
Color green=Color.pink;
Color white=Color.white;
public h2(String name){
super(name);
setSize(650,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
panel=new JPanel();
panel.setBackground(Color.gray);
panel.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(panel);
panel.setLayout(null);
btnQ=new JButton("Q");
btnQ.setBackground(white);
btnQ.setVerticalAlignment(SwingConstants.TOP);
btnQ.setHorizontalAlignment(SwingConstants.LEADING);
btnQ.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnQ.setBounds(0, 60, 47, 45);
panel.add(btnQ);
btnW=new JButton("W");
btnW.setBackground(white);
btnW.setVerticalAlignment(SwingConstants.TOP);
btnW.setHorizontalAlignment(SwingConstants.LEADING);
btnW.setFont(new Font("Times New Roman", Font.PLAIN,13));
btnW.setBounds(65, 60, 47, 45);
panel.add(btnW);
btnE=new JButton("E");
btnE.setBackground(white);
btnE.setVerticalAlignment(SwingConstants.TOP);
btnE.setHorizontalAlignment(SwingConstants.LEADING);
btnE.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnE.setBounds(130, 60, 47, 45);
panel.add(btnE);
btnR=new JButton("R");
btnR.setBackground(white);
btnR.setVerticalAlignment(SwingConstants.TOP);
btnR.setHorizontalAlignment(SwingConstants.LEADING);
btnR.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnR.setBounds(195, 60, 47, 45);
panel.add(btnR);
btnT=new JButton("T");
btnT.setBackground(white);
btnT.setVerticalAlignment(SwingConstants.TOP);
btnT.setHorizontalAlignment(SwingConstants.LEADING);
btnT.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnT.setBounds(260, 60, 47, 45);
panel.add(btnT);
btnY=new JButton("Y");
btnY.setBackground(white);
btnY.setVerticalAlignment(SwingConstants.TOP);
btnY.setHorizontalAlignment(SwingConstants.LEADING);
btnY.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnY.setBounds(325, 60, 47, 45);
panel.add(btnY);
btnU=new JButton("U");
btnU.setBackground(white);
btnU.setVerticalAlignment(SwingConstants.TOP);
btnU.setHorizontalAlignment(SwingConstants.LEADING);
btnU.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnU.setBounds(390, 60, 47, 45);
panel.add(btnU);
btnI=new JButton("I");
btnI.setBackground(white);
btnI.setVerticalAlignment(SwingConstants.TOP);
btnI.setHorizontalAlignment(SwingConstants.LEADING);
btnI.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnI.setBounds(455, 60, 47, 45);
panel.add(btnI);
btnO=new JButton("O");
btnO.setBackground(white);
btnO.setVerticalAlignment(SwingConstants.TOP);
btnO.setHorizontalAlignment(SwingConstants.LEADING);
btnO.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnO.setBounds(520, 60, 47, 45);
panel.add(btnO);
btnP=new JButton("P");
btnP.setBackground(white);
btnP.setVerticalAlignment(SwingConstants.TOP);
btnP.setHorizontalAlignment(SwingConstants.LEADING);
btnP.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnP.setBounds(585, 60, 47, 45);
panel.add(btnP);
btnA=new JButton("A");
btnA.setBackground(white);
btnA.setVerticalAlignment(SwingConstants.TOP);
btnA.setHorizontalAlignment(SwingConstants.LEADING);
btnA.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnA.setBounds(20, 120, 47, 45);
panel.add(btnA);
btnS=new JButton("S");
btnS.setBackground(white);
btnS.setVerticalAlignment(SwingConstants.TOP);
btnS.setHorizontalAlignment(SwingConstants.LEADING);
btnS.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnS.setBounds(85, 120, 47, 45);
panel.add(btnS);
btnD=new JButton("D");
btnD.setBackground(white);
btnD.setVerticalAlignment(SwingConstants.TOP);
btnD.setHorizontalAlignment(SwingConstants.LEADING);
btnD.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnD.setBounds(150, 120, 47, 45);
panel.add(btnD);
btnF=new JButton("F");
btnF.setBackground(white);
btnF.setVerticalAlignment(SwingConstants.TOP);
btnF.setHorizontalAlignment(SwingConstants.LEADING);
btnF.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnF.setBounds(215, 120, 47, 45);
panel.add(btnF);
btnG=new JButton("G");
btnG.setBackground(white);
btnG.setVerticalAlignment(SwingConstants.TOP);
btnG.setHorizontalAlignment(SwingConstants.LEADING);
btnG.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnG.setBounds(280, 120, 47, 45);
panel.add(btnG);
btnH=new JButton("H");
btnH.setBackground(white);
btnH.setVerticalAlignment(SwingConstants.TOP);
btnH.setHorizontalAlignment(SwingConstants.LEADING);
btnH.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnH.setBounds(345, 120, 47, 45);
panel.add(btnH);
btnJ=new JButton("J");
btnJ.setBackground(white);
btnJ.setVerticalAlignment(SwingConstants.TOP);
btnJ.setHorizontalAlignment(SwingConstants.LEADING);
btnJ.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnJ.setBounds(410, 120, 47, 45);
panel.add(btnJ);
btnK=new JButton("K");
btnK.setBackground(white);
btnK.setVerticalAlignment(SwingConstants.TOP);
btnK.setHorizontalAlignment(SwingConstants.LEADING);
btnK.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnK.setBounds(475, 120, 47, 45);
panel.add(btnK);
btnL=new JButton("L");
btnL.setBackground(white);
btnL.setVerticalAlignment(SwingConstants.TOP);
btnL.setHorizontalAlignment(SwingConstants.LEADING);
btnL.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnL.setBounds(540, 120, 47, 45);
panel.add(btnL);
btnZ=new JButton("Z");
btnZ.setBackground(white);
btnZ.setVerticalAlignment(SwingConstants.TOP);
btnZ.setHorizontalAlignment(SwingConstants.LEADING);
btnZ.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnZ.setBounds(40, 180, 47, 45);
panel.add(btnZ);
btnX=new JButton("X");
btnX.setBackground(white);
btnX.setVerticalAlignment(SwingConstants.TOP);
btnX.setHorizontalAlignment(SwingConstants.LEADING);
btnX.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnX.setBounds(105, 180, 47, 45);
panel.add(btnX);
btnC=new JButton("C");
btnC.setBackground(white);
btnC.setVerticalAlignment(SwingConstants.TOP);
btnC.setHorizontalAlignment(SwingConstants.LEADING);
btnC.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnC.setBounds(170, 180, 47, 45);
panel.add(btnC);
btnV=new JButton("V");
btnV.setBackground(white);
btnV.setVerticalAlignment(SwingConstants.TOP);
btnV.setHorizontalAlignment(SwingConstants.LEADING);
btnV.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnV.setBounds(235, 180, 47, 45);
panel.add(btnV);
btnB=new JButton("B");
btnB.setBackground(white);
btnB.setVerticalAlignment(SwingConstants.TOP);
btnB.setHorizontalAlignment(SwingConstants.LEADING);
btnB.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnB.setBounds(300, 180, 47, 45);
panel.add(btnB);
btnN=new JButton("N");
btnN.setBackground(white);
btnN.setVerticalAlignment(SwingConstants.TOP);
btnN.setHorizontalAlignment(SwingConstants.LEADING);
btnN.setFont(new Font("Times New Roman", Font.PLAIN,16));
btnN.setBounds(365, 180, 47, 45);
panel.add(btnN);
btnM=new JButton("M");
btnM.setBackground(white);
btnM.setVerticalAlignment(SwingConstants.TOP);
btnM.setHorizontalAlignment(SwingConstants.LEADING);
btnM.setFont(new Font("Times New Roman", Font.PLAIN,14));
btnM.setBounds(430, 180, 47, 45);
panel.add(btnM);
JPanel panel1 = new JPanel() ;
panel1.setBorder(new TitledBorder(null,"文本显示区",TitledBorder.LEADING,TitledBorder.TOP));
panel1.setBackground(Color.WHITE);
panel1.setBounds(0,0,630,45);
panel.add(panel1) ;
panel1.setLayout(new BorderLayout(0, 0));
jt=new JTextField();
panel1.add(jt,BorderLayout.CENTER);
jt.setColumns(27);
List<JButton> list=new ArrayList<>();
Component items[]=panel.getComponents();
for(Component c:items) {
if(c instanceof JButton) {
list.add((JButton)c);
}
}
jt.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
char ch=e.getKeyChar();
for(JButton btn:list) {
String btntext=btn.getText();
if(btntext.equalsIgnoreCase(String.valueOf(ch))) {
btn.setBackground(white);
}
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
char ch=e.getKeyChar();
for(JButton btn:list) {
String btntext=btn.getText();
if(btntext.equalsIgnoreCase(String.valueOf(ch))) {
btn.setBackground(green);
}
}
}
});
setVisible(true);
}
public static void main(String[] args) {
new h2("虚拟键盘");
}
}
最后展示的效果是这这样的:
按下w时
回复原状