Кнопки не подсвечиваются при нажатии соответствующей буквы на keboard
Поэтому я делаю программу typing tutor в качестве задания
Цель состоит в том, чтобы построить графический интерфейс с формой клавиатуры, и всякий раз, когда клавиша нажата на клавиатуре, ее соответствующая JButton должна быть выделена
Я написал этот код > & gt; клавиши действий и модификаторы работают правильно, но буквы и цифры не работают
Вы не могли бы мне помочь?
Что-то не так с моим ключевым слушателем?
Что я уже пробовал:
<pre>import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class Keyboard extends JFrame { private JTextField t,pangram; private JLabel j1,j2; private keys key; private Color color; private String label1,label2,label3; private String keyNames[]={"Back Quote","1","2","3","4","5","6","7","8","9","0","Minus","Equals","Backspace","","Q","W","E","R","T","Y","U","I","O","P","Open Bracket","Close Bracket","Back Slash","Caps Lock","A","S","D","F","G","H","J","K","L","Semicolon","Quote","Enter","Shift","Z","X","C","V","B","N","M","Comma","Period","Slash","Up","Ctrl","","Windows","Alt","Space","Alt","Ctrl","Left","Down","Right"}; public Keyboard(){ setLayout(null); label1=" Type some text using your keyboard.The Keys you press will be highlighted and the text will be displayed"; label2=" Note: CLicking the button with your mouse will not perform any action"; j1=new JLabel(label1); j2=new JLabel(label2); j1.setFont(new Font("Serif",Font.BOLD,20)); j2.setFont(new Font("Serif",Font.BOLD,20)); j1.setSize(945,23); j2.setSize(945,30); j1.setLocation(0,0); j2.setLocation(0,23); add(j1); add(j2); t=new JTextField(); t.setFont(new Font("",Font.PLAIN,30)); t.setSize(945,200); t.setLocation(0,85); t.addKeyListener(new KeyAdapter(){ @Override public void keyPressed(KeyEvent e){ System.out.println(KeyEvent.getKeyText(e.getKeyCode())); for (int i=0;i<keyNames.length;i++){ if (keyNames[i]==KeyEvent.getKeyText(e.getKeyCode())){ color=key.getButtons()[i].getBackground(); key.getButtons()[i].setBackground(Color.GREEN); } } } @Override public void keyReleased(KeyEvent e){ for (int i=0;i<keyNames.length;i++){ if (keyNames[i]==KeyEvent.getKeyText(e.getKeyCode())){ key.getButtons()[i].setBackground(color); } } } }); add(t); key=new keys(); key.setLocation(0,350); add(key); } public static void main(String[] args) { // TODO Auto-generated method stub Keyboard k=new Keyboard(); k.setVisible(true); k.setResizable(false); k.setDefaultCloseOperation(EXIT_ON_CLOSE); k.setSize(950,655); } }
Вот код класса ключей:
import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; class keys extends JLabel{ private String firstRow[]={"~","1","2","3","4","5","6","7","8","9","0","-","+","BackSpace"}; private String secondRow[]={"Tab","Q","W","E","R","T","Y","U","I","O","P","[","]","\\"}; private String thirdRow[]={"Caps","A","S","D","F","G","H","J","K","L",":","'","Enter"}; private String fourthRow[]={"Shift","Z","X","C","V","B","N","M",",",".","/","^"}; private String fifthRow[]={"Ctrl","Fn","Win","Alt","","Alt","Ctrl","<","*",">"}; private int count; private JButton buttons[]; private int m; private Color color; public keys(){ setLayout(null); setSize(970,263); count=firstRow.length+secondRow.length+thirdRow.length+fourthRow.length+fifthRow.length; buttons=new JButton[count]; for(int i=0;i<firstRow.length-1;i++){ buttons[i]=new JButton(firstRow[i]); buttons[i].setFont(new Font("",Font.PLAIN,14)); buttons[i].setSize(60,50); buttons[i].setLocation(i*60+i*2+5,5); add(buttons[i]); } buttons[13]=new JButton(firstRow[13]); buttons[13].setFont(new Font("",Font.PLAIN,14)); buttons[13].setSize(130,50); buttons[13].setLocation(811,5); add(buttons[13]); buttons[14]=new JButton(secondRow[0]); buttons[14].setFont(new Font("",Font.PLAIN,14)); buttons[14].setSize(100,50); buttons[14].setLocation(5,57); buttons[14].setFocusable(false); add(buttons[14]); m=15; for(int i=0;i<secondRow.length-2;i++){ buttons[m]=new JButton(secondRow[i+1]); buttons[m].setFont(new Font("",Font.PLAIN,14)); buttons[m].setSize(60,50); buttons[m].setLocation(i*60+i*2+107,57); add(buttons[m]); m++; } buttons[27]=new JButton(secondRow[13]); buttons[27].setFont(new Font("",Font.PLAIN,14)); buttons[27].setSize(90,50); buttons[27].setLocation(851,57); add(buttons[27]); buttons[28]=new JButton(thirdRow[0]); buttons[28].setFont(new Font("",Font.PLAIN,14)); buttons[28].setSize(110,50); buttons[28].setLocation(5,109); add(buttons[28]); m=29; for(int i=0;i<thirdRow.length-2;i++){ buttons[m]=new JButton(thirdRow[i+1]); buttons[m].setFont(new Font("",Font.PLAIN,14)); buttons[m].setSize(60,50); buttons[m].setLocation(i*60+i*2+117,109); add(buttons[m]); m++; } buttons[40]=new JButton(thirdRow[12]); buttons[40].setFont(new Font("",Font.PLAIN,14)); buttons[40].setSize(142,50); buttons[40].setLocation(799,109); add(buttons[40]); buttons[41]=new JButton(fourthRow[0]); buttons[41].setFont(new Font("",Font.PLAIN,14)); buttons[41].setSize(122,50); buttons[41].setLocation(5,161); add(buttons[41]); m=42; for(int i=0;i<fourthRow.length-2;i++){ buttons[m]=new JButton(fourthRow[i+1]); buttons[m].setFont(new Font("",Font.PLAIN,14)); buttons[m].setSize(60,50); buttons[m].setLocation(i*60+i*2+129,161); add(buttons[m]); m++; } buttons[52]=new JButton(fourthRow[11]); buttons[52].setFont(new Font("",Font.PLAIN,14)); buttons[52].setSize(60,50); buttons[52].setLocation(813,161); add(buttons[52]); buttons[53]=new JButton(fifthRow[0]); buttons[53].setFont(new Font("",Font.PLAIN,14)); buttons[53].setSize(100,50); buttons[53].setLocation(5,213); add(buttons[53]); m=54; for (int i=0;i<3;i++){ buttons[m]=new JButton(fifthRow[i+1]); buttons[m].setFont(new Font("",Font.PLAIN,14)); buttons[m].setSize(65,50); buttons[m].setLocation(i*65+i*2+107,213); add(buttons[m]); m++; } buttons[57]=new JButton(fifthRow[4]); buttons[57].setFont(new Font("",Font.PLAIN,14)); buttons[57].setSize(280,50); buttons[57].setLocation(308,213); add(buttons[57]); buttons[58]=new JButton(fifthRow[5]); buttons[58].setFont(new Font("",Font.PLAIN,14)); buttons[58].setSize(60,50); buttons[58].setLocation(590,213); add(buttons[58]); buttons[59]=new JButton(fifthRow[6]); buttons[59].setFont(new Font("",Font.PLAIN,14)); buttons[59].setSize(95,50); buttons[59].setLocation(652,213); add(buttons[59]); m=60; for (int i=0;i<3;i++){ buttons[m]=new JButton(fifthRow[i+7]); buttons[m].setFont(new Font("",Font.PLAIN,14)); buttons[m].setSize(60,50); buttons[m].setLocation(i*60+i*2+751,213); add(buttons[m]); m++; } setFocusable(true); addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ for (JButton b: buttons){ if (b.getText().equals(KeyEvent.getKeyText(e.getKeyCode()))) {color=b.getBackground(); b.setBackground(Color.RED);} } } public void keyReleased(KeyEvent e){ for (JButton b: buttons){ if (b.getText()==KeyEvent.getKeyText(e.getKeyCode())) b.setBackground(color); } } }); } public JButton[] getButtons(){ return buttons; } }