2012-04-23 14 views
0

3つの異なるjscrollpaneに3つの異なるjtableがあります。
私はマウスホイールをスクロールするときに、それらをすべて一緒にスクロールさせるいくつかのコードを書きました。
私はJScrollPaneのをinherritedし、次のようにそのprocessMouseWheelEventのmethosをオーバーライド:3つのJTableを同時に上下に移動/スクロールします。

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

を使用してPAGEDOWN PAGEUPをcanelledしている。しかし、
私の唯一の問題は今、ユーザーがアップクリックしたときにということで、彼らは一緒に行こうとせず、むしろ一義的にスクロールする。
提案がありますか?
1.良い方法があります:
は、これまでのところ私は

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

       } 
      } 
      return false; 
     } 
    }); 

しかし、のようなものが私のスクロールペインに書きましたか?
2.多分私は何とかactionMapでそれを行う必要がありますか?
3.キーアップ/ダウンイベントを他のスクロールペインにどのように渡すのですか?
4.スクロールペインの表示部分の終わり近くにいるかどうかを知ることはできますか?それが必要です

答えて

7

1,2,3:スクロールバーでリスナーを使用すると、マウス、キーボード、スクロールバーのやりとりで動作するようになります。そうすれば、キーリスナーやマウスリスナーは必要ありません。

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

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

4:あなたが終わり近くにいるかどうかを確認するにJScrollPaneのgetVerticalScrollBar()のgetMaximumSize()とgetModel()を見てくださいここでは一つの方法です。

+0

ワウ。 a。もし私があなたにもっとポイントを与えることができたら、私はそうするでしょう。 b。私はこの1行で多くのコードを削除しました。 c。私は今やnoに答える必要はない。 4 .. d。どうもありがとう。 – Jeb

+0

長年にわたり私を大いに助けてくれたコミュニティに返すのはうれしいです。 – Jim

関連する問題