5

JScrollPane 内に JPanel があり、JPanel は関数で矢印キーを使用します。矢印キーが押されたときに JScrollPane がスクロールするのは面倒です。矢印キーが押されたときに JScrollPane がスクロールしないようにするにはどうすればよいですか?

4

2 に答える 2

7

多すぎるかもしれませんが、これを試すことができます:

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) {
    }});
于 2012-07-18T03:06:21.053 に答える
4

入力/アクションマップ参照を置き換える必要があると思います

ActionMap am = scrollPane.getActionMap();
am.remove("scrollDown");
am.remove("scrollUp");

BasicScrollPaneUI から抽出したキーなので、UI 間で変更される可能性がありますが、アイデアは機能するはずです

アップデート

さて、それはひどいものでした。私はシンプルに逃げることを望んでいました。

    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";

他の入力/アクション マップ コマンドは

于 2012-07-18T01:53:36.870 に答える