Я пытаюсь интегрировать привязки клавиш в программу, которую я создаю, но поскольку эта программа длинная, я пытаюсь изучить меньшую аналогичную кодированную программу, которую я нашел в StackOverflow.
Вот код, я использую:
ActionEvent не распознает привязку CTRL
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Demo {
\t @SuppressWarnings("serial")
\t private void initGUI() {
\t \t JPanel content = new JPanel(new FlowLayout());
\t \t content.add(new JLabel("Test:"));
\t \t AbstractAction buttonPressed = new AbstractAction() {
\t \t \t @Override
\t \t \t public void actionPerformed(ActionEvent e) {
\t \t \t \t System.out.println(e.getActionCommand());
\t \t \t \t System.out.println(e.getSource());
\t \t \t \t if ("a".equals(e.getActionCommand()))
\t \t \t \t \t content.setBackground(new Color(227, 19, 19));
\t \t \t \t if ("b".equals(e.getActionCommand()))
\t \t \t \t \t content.setBackground(new Color(0, 225, 19));
\t \t \t }
\t \t };
\t \t JButton submit = new JButton("Submit");
\t \t submit.addActionListener(buttonPressed);
\t \t submit.getInputMap(javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW).put(
javax.swing.KeyStroke.getKeyStroke(
java.awt.event.KeyEvent.VK_A,
java.awt.event.InputEvent.CTRL_DOWN_MASK),
"A_pressed");
\t \t submit.getActionMap().put("A_pressed", buttonPressed);
submit.getInputMap(javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW).put(
javax.swing.KeyStroke.getKeyStroke(
java.awt.event.KeyEvent.VK_B, 0),
"B_pressed");
\t \t submit.getActionMap().put("B_pressed", buttonPressed);
\t \t content.add(submit);
\t \t JFrame frame = new JFrame("Demo");
\t \t frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
\t \t frame.setContentPane(content);
\t \t frame.pack();
\t \t frame.setLocationRelativeTo(null);
\t \t frame.setVisible(true);
\t }
\t public static void main(String[] args) {
\t \t SwingUtilities.invokeLater(new Runnable() {
\t \t \t @Override
\t \t \t public void run() {
\t \t \t \t new Demo().initGUI();
\t \t \t }
\t \t });
\t }
}
Что я, что должно произойти, чтобы нажать CTRL + A и имеют изменить цвет фона. Однако, когда я это делаю, System.out.println(e.getActionCommand())
возвращает символ, который выглядит как вопросительный знак в поле, как будто это неизвестный персонаж или что-то в этом роде. Программа работает, если вы нажмете B, но добавление модификатора CTRL работает некорректно.
Является ли проблема чем-то, что я не делаю правильно? Является ли программа работоспособной, и я не знаю, как сравнивать e.getActionCommand()
и что когда-либо строка CTRL + A возвращается как ActionEvent? Пожалуйста помоги.
Вы делаете то же самое дважды для второго решения. Кроме того, почему работает второе решение? Является ли «\ u0001» символом Unicode для CTRL + A? Как изменить его, чтобы я мог использовать разные буквы? – IAmTheBee
Да, "\ u0001" есть. – Billydan