MouseWheelListener блок прокрутки - PullRequest
3 голосов
/ 25 марта 2012
    JEditorPane.addMouseWheelListener(new MouseWheelListener() {
        public void mouseWheelMoved(MouseWheelEvent e) {
        }
    });

Когда я добавляю эти строки - в JEditorPane прокрутка перестает работать. Как это можно вылечить?

Ответы [ 2 ]

2 голосов
/ 25 марта 2012

Вы должны опубликовать больше своего кода, чтобы получить лучшую помощь.Тем не менее, эта простая демонстрация работала хорошо для меня (т.е. прокрутка все еще работает после добавления 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 );
    }
}
1 голос
/ 25 марта 2012

Вы можете прочитать о том, как MouseWheelEvents отправляются в Javadoc: http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/MouseWheelEvent.html

Короче говоря, события доставляются в самый верхний компонент под курсором и в разгаре, в большинстве случаев события колеса мыши обрабатываются JScrollPane. JEditorPane содержит область прокрутки внутри нее, поэтому, если вы добавите прослушиватель на JEditorPane, JScrollPane прекратит получать события. Вот почему у вас есть проблема. Вместо этого лучше добавить слушателя в JScrollPane.

...