2012-04-23 3 views
0

3 개의 서로 다른 jscrollpane에 3 개의 다른 jtable이 있습니다.
나는 마우스 휠을 스크롤 할 때 모두 함께 스크롤되도록 일부 코드를 작성했습니다.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 키 페이지 업을 canelled 한 다음과 같이
나는 그 processMouseWheelEvent에있는 Methos를 JScrollPane의를 inherrited 및 오버라이드 (override) 아래로, 그들은 함께 가지 않고 오히려 indentently 스크롤.
제안 사항이 있으십니까?
1. 더 나은 방법이있다 :
은 지금까지 나는

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

       } 
      } 
      return false; 
     } 
    }); 

그러나처럼 내 스크롤 뭔가 썼다?
2. 액션 맵에서 어떻게 든해야할까요?
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

와우. 에이. 내가 너에게 더 많은 것을 주었다면. 비. 나는이 한 줄로 많은 코드를 삭제했다. 기음. 나는 지금 no에 대답 할 필요가 없다. 4 .. d. 고마워. – Jeb

+0

몇 년 동안 나에게 많은 도움이 된 공동체에 기꺼이 돌아와서 기쁩니다. – Jim

관련 문제