【问题标题】:MouseWheelListener block scrollMouseWheelListener 块滚动
【发布时间】:2012-03-24 21:51:56
【问题描述】:
    JEditorPane.addMouseWheelListener(new MouseWheelListener() {
        public void mouseWheelMoved(MouseWheelEvent e) {
        }
    });

当我添加这些行时 - 在 JEditorPane 中滚动停止工作。怎么治好?

【问题讨论】:

    标签: java scroll block jeditorpane


    【解决方案1】:

    您应该发布更多代码以获得更好的帮助。然而,这个简单的演示对我来说效果很好(即在将MouseWheelListener 添加到JScrollPane 后滚动仍然有效)。

    import java.awt.event.MouseWheelEvent;
    import java.awt.event.MouseWheelListener;
    
    import javax.swing.JEditorPane;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    
    public class Frame
    {
        public static void main( String[] args )
        {
            JFrame frame = new JFrame( );
            JEditorPane pane = new JEditorPane( );
    
            String t = "";
            for ( int i = 0 ; i < 10000 ; i++ ) t += "t";
    
            pane.setText( t );
    
            JScrollPane scroll = new JScrollPane( pane );
    
            scroll.addMouseWheelListener( new MouseWheelListener( )
            {
                @Override
                public void mouseWheelMoved( MouseWheelEvent e )
                {
                    System.out.println( "Scroll" );
                }
            });
    
            frame.add( scroll );
            frame.setSize( 400, 400 );
            frame.setVisible( true );
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以阅读有关如何在 Javadoc 中调度 MouseWheelEvents 的信息:http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/MouseWheelEvent.html

      简而言之,事件被传递到光标下和摆动的最顶部组件,在大多数情况下,鼠标滚轮事件由 JScrollPane 处理。 JEdi​​torPane 内部包含一个滚动窗格,因此如果您在 JEditorPane 上添加侦听器,JScrollPane 将停止接收事件。这就是你有问题的原因。最好给 JScrollPane 添加一个监听器。

      【讨论】:

      • 但如果向 JScrollPane 添加侦听器 - 在 JScrollPane 中滚动停止工作。我需要滚动总是有效的。我需要滚动随时随地工作。也许有一种方法可以在不阻塞的情况下获取事件?
      • 我在 JScrollPane 中有一个 JTextArea。 (JTextArea 的实际父级是 JViewPort,而 JViewPort 的父级是 JScrollPane。)我在 JTextArea 的 getParent().getParent() 中添加了一个 MouseWheelListener,它是 JScrollPane,我得到了默认滚动操作和我的自定义 MouseWheelEvents。 (我使用 mouseWheelEvent.isControlDown() 来放大/缩小 JTextPane 中的内容(通过增加或减少字体大小)
      猜你喜欢
      • 2011-12-14
      • 2023-04-07
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多