同时在三个 JTable 上上下移动/滚动



我在三个不同的jscrollpane上有三个不同的jtable-一个挨着另一个。
我成功地编写了一些代码,使它们在滚动鼠标滚轮时一起滚动。
我隐秘了JScrollpane并覆盖了它的进程MouseWheelEvent methos,如下所示:

  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.也许我应该在动作地图中以某种方式做到这一点?
3. 如何将键向上/向下事件传递给另一个滚动窗格?
4. 我可以知道我是否在滚动窗格中查看部分的末尾吗?需要吗

1、2 和 3:您应该在滚动条上使用侦听器,以便它适用于鼠标、键盘和滚动条交互。 这样,您就不需要键或鼠标侦听器。这是一种方法:

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

4:查看JScrollPane的getVerticalScrollBar().getMaximumSize()和getModel(),看看你是否接近尾声。

最新更新