2012-01-04 69 views
1

我有一个JScrollPane,它的内容窗格有一个JPanel。到那JPanel我加小JPanel s,和预期的一样,如果我加了太多JPanel,就会出现一个垂直滚动条。JScrollPane中的JScrollPane

问题是,我的小JPanel s也包含一个JScrollPane也为JEditorPane。我想使用鼠标滚轮,只有用于外部滚动窗格,不适用于较小的滚动窗格。我已经为小卷轴设置了wheelScrollingEnabled()false,但是如果我向任何方向滚动,并且鼠标移过JEditorPane,则滚动不再起作用。

有什么建议吗?

+0

+1对于有趣的问题:我的期望是将wheelScrollEnabled设置为false会做到这一点:-) – kleopatra 2012-01-05 12:04:40

回答

6

您可能尝试将滚动事件从内滚动窗格转发到其父项。

innerScrollPane.addMouseWheelListener(new MouseWheelListener() { 

    @Override 
    public void mouseWheelMoved(MouseWheelEvent e) { 
     innerScrollPane.getParent().dispatchEvent(e); 
    } 
}); 
+0

谢谢,这工作! :) – Rothens 2012-01-04 16:15:03

+0

好肮脏的解决方法:-)在BasicScrollPaneUI,IMO应该添加/删除内部安装的wheelListener的行为(不能恢复为wheelScrollEnabled == false的wheelEvent的祖先) – kleopatra 2012-01-05 12:00:18

1

添加MouseWheelListenerJScrollPane和处理事件时,通过调用其dispatchEvent(AWTEvent)方法将它传递给主JScrollPane;

+0

谢谢,我会试一试。 :) – Rothens 2012-01-04 15:58:50

+0

不,不必要的硬编码依赖不是一个选项,特别是不是因为editorPane与问题无关 – kleopatra 2012-01-05 12:04:23

+0

同意,它的监听器应该注册到JScrollPane。 – Vlad 2012-01-05 12:06:29