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

时间:2012-04-23 14:02:23

标签: java swing listener jscrollpane jscrollbar

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

1 个答案:

答案 0 :(得分: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(),看看你是否已接近尾声。