Как я описал в заголовке, я должен щелкнуть JButton, если нажата клавиша с клавиатуры. Например:
ActionListenerClass actionListener = new ActionListenerClass();
KeyListenerClass actionListener = new KeyListenerClass();
JButton aButton = new JButton("A");
aButton.setActionCommand("A");
aButton.addActionListener(actionListener);
aButton.addKeyListener(keyListener);
При нажатии «A» на клавиатуре кнопка A выполнит doClick () и отправит команду действия частному классу прослушивателя действий для обработки событий. Теперь я прочитал много решений о переполнении стека, и все они использовали привязку клавиш, которая должна связывать входную карту и карту действий. Дело в том, что мне абсолютно необходимо использовать прослушиватель ключей с частным классом, но не с привязкой. Единственное, о чем я могу догадаться, так это то, что приведенный выше keyListener должен каким-то образом получить ввод с клавиатуры и выполнить doClick на кнопке, к которой он привязан, в методе keyPressed, который я попробовал, но он вообще не работал.
Редактировать: вот мой весь код.
- CalculatorViewController. java
import java.awt.*;
import java.awt.event.*;
import java.util.regex.Pattern;
import javax.swing.*;
/**Create the app GUI
* @author Bach Le
* @version 1.0
* @see java.awt, java.awt.event, javax.swing
* @since 12.0.1
*/
public class CalculatorViewController extends JPanel {
private JButton backSpaceButton;
public CalculatorViewController() {
Controller controller = new Controller();
KeyController keyController = new KeyController();
setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5,Color.black));//Adding the panel border
backSpaceButton = new JButton("\u21DA");
backSpaceButton.setPreferredSize(new Dimension(52,55));
backSpaceButton.setOpaque(false);//set transparency
backSpaceButton.setContentAreaFilled(false);
backSpaceButton.setBorderPainted(false);
backSpaceButton.setActionCommand("Backspace Button");//set the action command
backSpaceButton.addActionListener(controller);//add action listener
backSpaceButton.setToolTipText("Backspace (Alt+B)");//set tooltip text
backSpaceButton.setFont(font);//set the font
backSpaceButton.addKeyListener(keyController);
add(backSpaceButton) ;
}
private class Controller implements ActionListener{
public void actionPerformed(ActionEvent e) {
//event handling here
}
}
private class KeyController implements KeyListener{
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==65) {
backSpaceButton.doClick();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
}
2. Калькулятор. java
public class Calculator {
public static void main(String[] args) {
CalculatorViewController pane = new CalculatorViewController();
JFrame frame = new JFrame("Calculator");
frame.setContentPane(pane);
frame.setSize(380, 520);
frame.setLocationByPlatform(true);
frame.setResizable(true);
frame.setVisible(true);
}
}
Сосредоточьтесь на CalculatorViewController, я пытаюсь заставить backSpaceButton щелкнуть при нажатии A (конечно, это настоящая кнопка возврата, но я исправлю ее позже), поэтому он отправит свою команду действия зарегистрированному для него прослушивателю действия, который будет обрабатываться в методе внутреннего класса Controller. Я не уверен, как это сделать.