Вы можете сделать это, используя метод JTextArea#setEditable(false)
, когда клавиша numpad имеет значение pressed
, а затем JTextArea#setEditable(true)
, когда клавиша numpad отпущена.
Пример:
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
public class IgnoreNumpad {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextArea area = new JTextArea();
area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, 0, false), "disable");
area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD2, 0, false), "disable");
area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, 0, true), "enable");
area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD2, 0, true), "enable");
//Add all keys
area.getActionMap().put("disable", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
area.setEditable(false); //When key pressed, set it non-editable
}
});
area.getActionMap().put("enable", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
area.setEditable(true); //Key released, make it editable
}
});
frame.add(area);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}