Java 鼠标滚轮侦听器块滚动

Java 鼠标滚轮侦听器块滚动,java,scroll,block,jeditorpane,Java,Scroll,Block,Jeditorpane,当我在“绝地武士”窗格中添加这些行时,滚动停止工作。如何解决此问题?您可以阅读有关如何在Javadoc中调度MouseWheelEvents的内容: 简而言之,事件在游标下和swing中传递到最顶端的组件,在大多数情况下,鼠标滚轮事件由JScrollPane处理。JEditorPane中包含一个滚动窗格,因此如果在JEditorPane上添加侦听器,JScrollPane将停止接收事件。这就是你有问题的原因。最好将侦听器添加到JScrollPane中。您应该发布更多代码以获得更好的帮助。但是,这

当我在“绝地武士”窗格中添加这些行时,滚动停止工作。如何解决此问题?

您可以阅读有关如何在Javadoc中调度MouseWheelEvents的内容:


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

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

import java.awt.event.mouseweelEvent;
导入java.awt.event.MouseWheelListener;
导入javax.swing.JEditorPane;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
公共类框架
{
公共静态void main(字符串[]args)
{
JFrame=newjframe();
JEditorPane=新的JEditorPane();
字符串t=“”;
对于(int i=0;i<10000;i++)t++=“t”;
窗格.setText(t);
JScrollPane scroll=新的JScrollPane(窗格);
scroll.addMouseWheelListener(新的MouseWheelListener()
{
@凌驾
已移动公共无效鼠标滚轮(鼠标滚轮事件e)
{
System.out.println(“滚动”);
}
});
frame.add(滚动);
框架。设置尺寸(400400);
frame.setVisible(true);
}
}

但是如果将侦听器添加到JScrollPane中,JScrollPane中的滚动将停止工作。我需要滚动始终工作。无论何时何地,我都需要滚动工作。也许有一种方法可以在不阻塞的情况下获取事件?我在JScrollPane中有一个JTextArea。(JTextArea的实际父对象是JViewPort,而JViewPort的父对象是JScrollPane。)我将MouseWheelListener添加到JTextArea的getParent().getParent(),它是JScrollPane,我可以获得默认滚动动作和自定义MouseWheelEvents。(我使用mouseWheelEvent.isControlDown()放大/缩小JTextPane中的内容(通过增大或减小字体大小)
    JEditorPane.addMouseWheelListener(new MouseWheelListener() {
        public void mouseWheelMoved(MouseWheelEvent e) {
        }
    });
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 );
    }
}