Как предотвратить прокрутку JScrollPane при нажатии клавиш со стрелками
У меня есть JPanel внутри JScrollPane, и JPanel использует клавиши со стрелками в функции. Раздражает, что JScrollPane прокручивается при нажатии клавиш со стрелками. Как сделать так, чтобы JScrollPane не прокручивался при нажатии клавиш со стрелками?
2 ответа
Это может быть слишком много, но вы можете попробовать это:
UIManager.getDefaults().put("ScrollPane.ancestorInputMap",
new UIDefaults.LazyInputMap(new Object[] {}));
Вы также можете заменить действие глобально:
InputMap actionMap = (InputMap) UIManager.getDefaults().get("ScrollPane.ancestorInputMap");
actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
}});
actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
}});
Следуя предложению @MadProgrammer, вы можете заменить определенные действия для стрелок на клавиатуре. использование unitScrollRight
а также unitScrollDown
имена действий:
scrollPane.getActionMap().put("unitScrollRight", new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
}});
scrollPane.getActionMap().put("unitScrollDown", new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
}});
Я думаю, вам придется заменить ссылку на карту ввода / действия
ActionMap am = scrollPane.getActionMap();
am.remove("scrollDown");
am.remove("scrollUp");
Ключи, которые я извлек из BasicScrollPaneUI, чтобы они могли меняться между интерфейсами, но идея должна работать
ОБНОВИТЬ
Хорошо, это отстой. Я надеялся сойти с рук с простым.
InputMap im = comp.getInputMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "scrollDown");
ActionMap am = comp.getActionMap();
am.put("scrollDown", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getSource() + " - no go down");
}
});
Если результат действия был аннулирован. Я получил его для работы с JList и большой JPanel
Пока я здесь
private static final String SCROLL_UP = "scrollUp";
private static final String SCROLL_DOWN = "scrollDown";
private static final String SCROLL_HOME = "scrollHome";
private static final String SCROLL_END = "scrollEnd";
private static final String UNIT_SCROLL_UP = "unitScrollUp";
private static final String UNIT_SCROLL_DOWN = "unitScrollDown";
private static final String SCROLL_LEFT = "scrollLeft";
private static final String SCROLL_RIGHT = "scrollRight";
private static final String UNIT_SCROLL_LEFT = "unitScrollLeft";
private static final String UNIT_SCROLL_RIGHT = "unitScrollRight";
Являются ли другие команды ввода / действия карты