KeyListener. Не работает ввод с клавиатуры - Java
Формулировка задачи:
import java.awt.Color; import java.awt.EventQueue; import java.awt.KeyEventDispatcher; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.SwingUtilities; import com.sun.xml.internal.ws.api.Component; public class C1 extends JFrame { JButton b0 = new JButton("0"); JButton b1 = new JButton("1"); JButton b2 = new JButton("2"); JButton b3 = new JButton("3"); JButton b4 = new JButton("4"); JButton b5 = new JButton("5"); JButton b6 = new JButton("6"); JButton b7 = new JButton("7"); JButton b8 = new JButton("8"); JButton b9 = new JButton("9"); JButton b10 = new JButton("+"); JButton b11 = new JButton("-"); JButton b12 = new JButton("*"); JButton b13 = new JButton("/"); JButton b14 = new JButton("="); JButton b15 = new JButton("CE"); JButton b16 = new JButton("<-"); JButton b17 = new JButton("CLOSE"); JTextField t = new JTextField(); boolean bb; public C1(String name) { super("Калькулятор"); setLayout(null); setSize(300, 400); t.setBounds(10, 10, 260, 50); t.setEditable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); b0.setBounds(60, 220, 50, 50); b0.setBackground(Color.BLUE); b1.setBounds(10, 70, 50, 50); b2.setBounds(60, 70, 50, 50); b3.setBounds(110, 70, 50, 50); b4.setBounds(10, 120, 50, 50); b5.setBounds(60, 120, 50, 50); b6.setBounds(110, 120, 50, 50); b7.setBounds(10, 170, 50, 50); b8.setBounds(60, 170, 50, 50); b9.setBounds(110, 170, 50, 50); b10.setBounds(10, 220, 50, 50); b10.setBackground(Color.CYAN); b11.setBounds(110, 220, 50, 50); b12.setBounds(160, 70, 50, 50); b13.setBounds(160, 120, 50, 50); b14.setBounds(160, 170, 50, 50); b15.setBounds(160, 220, 50, 50); b16.setBounds(210, 70, 60, 200); b17.setBounds(10, 270, 100, 70); add(b0); add(b1); add(b2); add(b3); add(b4); add(b5); add(b6); add(b7); add(b8); add(b9); add(b10); add(b11); add(b12); add(b13); add(b14); add(b15); add(b16); add(b17); add(t); b17.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); b0.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_NUMPAD0) { t.setText(t.getText() + "0"); } } }); } } Так же мне надо создать возможность попеременного ввода с клавиатуры и по нажатию JButton вот пример кода: b2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { t.setText(t.getText() + "2"); } }); b2.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_NUMPAD2) { t.setText(t.getText() + "2"); } } });
Решение задачи: «KeyListener. Не работает ввод с клавиатуры»
textual
Листинг программы
import org.w3c.dom.events.Event; import java.awt.Color; import java.awt.event.*; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import javax.swing.*; public class C1 extends JFrame implements Runnable { JPanel panel = new JPanel(); JButton b[] = new JButton[18]; // Массив кнопок от [0]-[9] будут цифры, остальное - другие функции JTextField t = new JTextField(); public static void main(String[] args){ C1 c = new C1(); c.run(); } @Override public void run() { setTitle("Калькулятор"); panel.setLayout(null); setSize(300, 400); t.setBounds(10, 10, 260, 50); t.setEditable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); for(int i = 0; i < b.length; i++){ if(i<10) { b[i] = new JButton(String.valueOf(i)); // Инициализируем кнопки и добавляем текст actionNumb(b[i]); // Для клавиш от 0 к 9 } else b[i] = new JButton(); } b[10] = new JButton("+"); b[11] = new JButton("-"); b[12] = new JButton("*"); b[13] = new JButton("/"); b[14] = new JButton("="); b[15] = new JButton("CE"); b[16] = new JButton("<-"); b[17] = new JButton("CLOSE"); b[0].setBounds(60, 220, 50, 50); b[0].setBackground(Color.BLUE); b[1].setBounds(10, 70, 50, 50); b[2].setBounds(60, 70, 50, 50); b[3].setBounds(110, 70, 50, 50); b[4].setBounds(10, 120, 50, 50); b[5].setBounds(60, 120, 50, 50); b[6].setBounds(110, 120, 50, 50); b[7].setBounds(10, 170, 50, 50); b[8].setBounds(60, 170, 50, 50); b[9].setBounds(110, 170, 50, 50); b[10].setBounds(10, 220, 50, 50); b[10].setBackground(Color.CYAN); b[11].setBounds(110, 220, 50, 50); b[12].setBounds(160, 70, 50, 50); b[13].setBounds(160, 120, 50, 50); b[14].setBounds(160, 170, 50, 50); b[15].setBounds(160, 220, 50, 50); b[16].setBounds(210, 70, 60, 200); b[17].setBounds(10, 270, 100, 70); for(int i = 0; i < b.length; i++) { b[i].setFocusable(false); // Что-бы не было проблем с фокусом } action(); // Добавляем слушателя и прочее для всего остального for(int i = 0; i < b.length; i++){ panel.add(b[i]); } panel.add(t); panel.setBackground(Color.WHITE); this.add(panel); setVisible(true); } public void actionNumb(JButton butt){ // Для чисел от 0 к 9 butt.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { t.setText(t.getText() + butt.getText()); } }); } public void action() { this.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { // Если мышь весит на JFrame requestFocusInWindow(); // тогда фокус всеравно будет на форме для Нумпада } @Override public void mouseExited(MouseEvent e) { // И если выйдет с формы на любой другой компонент requestFocusInWindow(); } }); this.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { for(int i = 0; i < 9; i++) { if (e.getKeyCode() == 96 + i) { // от 96 к 105 - Номер кнопок на нумпаде от 0 к 9 t.setText(t.getText() + i); } } } }); b[17].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); b[16].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // Для <- String str = t.getText(); String newStr = ""; char[] chrStr = str.toCharArray(); for(int i = 0; i < chrStr.length - 1; i++){ newStr += chrStr[i]; } t.setText(newStr); } }); b[14].addActionListener(new ActionListener() { // Это для = , пиши любое уровнение с множеством + - *... , оно все решит :) @Override public void actionPerformed(ActionEvent e) { ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); String expression = t.getText(); float result = 0; try { result = Float.valueOf(engine.eval(expression).toString()); t.setText(String.valueOf(result)); } catch (ScriptException e1) { e1.printStackTrace(); } } }); b[10].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { t.setText(t.getText() + " + "); } }); // Для -, *, /, CE сам допишешь } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д