如何在按下箭头键时阻止JScrollPane滚动

Joh*_*ohn 5 java swing jscrollpane

我在JScrollPane中有一个JPanel,而JPanel在函数中使用了箭头键.令人讨厌的是,当按下箭头键时,JScrollPane会滚动.如何使它在按下箭头键时不滚动JScrollPane?

ten*_*ica 7

它可能太多了,但你可以尝试这个:

UIManager.getDefaults().put("ScrollPane.ancestorInputMap",  
        new UIDefaults.LazyInputMap(new Object[] {}));
Run Code Online (Sandbox Code Playgroud)

您也可以全局替换操作:

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) {
    }});
Run Code Online (Sandbox Code Playgroud)

根据@MadProgrammer的建议,您可以替换键盘箭头的特定操作.使用unitScrollRightunitScrollDown行动名称:

scrollPane.getActionMap().put("unitScrollRight", new AbstractAction(){
    @Override
    public void actionPerformed(ActionEvent e) {
    }});
scrollPane.getActionMap().put("unitScrollDown", new AbstractAction(){
    @Override
    public void actionPerformed(ActionEvent e) {
    }});
Run Code Online (Sandbox Code Playgroud)