【问题标题】:JScrollPane in JScrollPaneJScrollPane 中的 JScrollPane
【发布时间】:2012-02-02 12:25:16
【问题描述】:

我有一个JScrollPane,它的内容窗格有一个JPanel。对那个JPanel,我添加了较小的JPanels,正如预期的那样,如果我添加太多JPanel,就会出现一个垂直滚动条。

问题是,我的小JPanels 也包含一个JScrollPane 用于JEditorPane。我想将鼠标滚轮 only 用于外部滚动窗格,而不是较小的滚动窗格。我已经为小滚动窗格将wheelScrollingEnabled() 设置为false,但是如果我向任何方向滚动,并且鼠标越过JEditorPane,滚动就不再起作用了。

有什么建议吗?

【问题讨论】:

  • +1 有趣的收获:我的期望是将 wheelScrollEnabled 设置为 false 可以解决问题:-)

标签: java swing jscrollpane


【解决方案1】:

MouseWheelListener 添加到您的JScrollPane,并在处理事件时,通过调用其dispatchEvent(AWTEvent) 方法将其传递给主JScrollPane

【讨论】:

  • 谢谢,我试试。 :)
  • 不,不必要的硬编码依赖不是一种选择,尤其是因为 editorPane 与问题无关
  • 同意,监听器应该注册到 JScrollPane。
  • 更好,但仍将依赖项从内部硬编码到主 ;-) 看看@Howard 的硬编码免费方法的解决方案
  • 是的,我知道,这就是为什么我支持@Howard 的答案...我只是更正了我的答案,至少它没有错。
【解决方案2】:

您可以尝试将滚轮事件从内部滚动窗格转发到其父级。

innerScrollPane.addMouseWheelListener(new MouseWheelListener() {

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

【讨论】:

  • 好肮脏的解决方法:-) 行为(在wheelScrollEnabled == false 上不恢复将wheelEvent 分派给祖先)是IMO BasicScrollPaneUI 中的一个错误 - 它应该添加/删除内部安装的wheelListener视情况而定
猜你喜欢
  • 2015-11-19
  • 2011-05-11
  • 2013-12-17
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
相关资源
最近更新 更多