0

3 つの異なる jscrollpane に 3 つの異なる jtable があります。
マウス ホイールをスクロールすると、それらすべてが一緒にスクロールされるようにするコードの作成に成功しました。
JScrollpane を継承し、その processMouseWheelEvent メソッドを次のようにオーバーライドしました。

  public void processMouseWheelEvent(MouseWheelEvent e) {
    ...
    if (e.getSource() == this) {
        for (BTSJScrollPane other : effected) {
            other.processMouseWheelEvent(e);
        }
    }
}

を使用してページアップページダウンをキャンセルしました

 final InputMap inputMap =   
             comp.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    inputMap.put(KeyStroke.getKeyStroke("PAGE_DOWN"), EMPTY);
    inputMap.put(KeyStroke.getKeyStroke("PAGE_UP"), EMPTY);

    comp.getActionMap().put(EMPTY, emptyAction);

しかし、
私の唯一の問題は、ユーザーが上下にクリックすると、一緒に移動せず、個別にスクロールすることです。
助言がありますか ?
これまでのところ、スクロールペインに次のようなものを書きました

    KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
        @Override public boolean dispatchKeyEvent(KeyEvent e) {
            if (thisIsThesourceTable) {
                if (e.getKeyCode() == 38 || e.getKeyCode() == 40) {

                }
            }
            return false;
        }
    });

しかし:
1.もっと良い方法はありますか?
2.多分私はactionMapで何とかするべきですか?
3. キー アップ/ダウン イベントを他のスクロールペインに渡すにはどうすればよいですか?
4. スクロール ペインの表示部分の終わりに近づいているかどうかを知ることはできますか? 必要ですか

4

1 に答える 1

7

1、2、および 3: マウス、キーボード、およびスクロールバーの操作で動作するように、スクロールバーでリスナーを使用する必要があります。そうすれば、キーやマウスのリスナーは必要ありません。1 つの方法を次に示します。

scroll1.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {

    @Override
    public void adjustmentValueChanged(AdjustmentEvent e) {
       scroll2.getVerticalScrollBar().setValue(e.getValue());
    }
});

4: JScrollPane の getVerticalScrollBar().getMaximumSize() と getModel() を見て、終わりに近づいているかどうかを確認します。

于 2012-04-23T14:29:44.573 に答える