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