2012-04-23 21 views
0

我在三個不同的jscrollpane上有三個不同的jtable - 一個緊挨着另一個。
我成功地編寫了一些代碼,當我滾動鼠標滾輪時,它們都會一起滾動。
我inherrited JScrollPane中並重寫其processMouseWheelEvent methos如下:同時在三個JTable上移動/滾動。

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

我已經canelled的頁上一頁下一頁使用

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

但是,
現在我唯一的問題是,當用戶點擊起來下來,他們不一起走,而是滾動顯示。
有什麼建議嗎?
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

哇。一個。如果我能給你更多的意見,我會的。灣現在我已經用這一行刪除了很多代碼。 C。我現在不需要回答否。 4 .. d。非常感謝。 – Jeb 2012-04-23 15:35:16

+0

很高興回饋給那些多年來幫助過我的社區。 – Jim 2012-04-23 15:49:04