2012-03-24 48 views
3
JEditorPane.addMouseWheelListener(new MouseWheelListener() { 
     public void mouseWheelMoved(MouseWheelEvent e) { 
     } 
    }); 

當我添加這些行 - 在JEditorPane滾動停止工作。如何治癒?MouseWheelListener塊滾動

回答

2

您應該發佈更多代碼以獲得更好的幫助。不過,這個簡單的演示對我來說工作得很好(即在將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

你可以閱讀有關MouseWheelEvents如何在Javadoc中出動:http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/MouseWheelEvent.html

總之,事件在光標和擺動傳遞到最上面的部分,在大多數情況下,鼠標滾輪事件由JScrollPane的處理。 JEdi​​torPane包含一個滾動面板,所以如果你在JEditorPane上添加一個監聽器,JScrollPane將停止接收事件。這就是爲什麼你有這個問題。相反,最好將監聽器添加到JScrollPane。

+0

但是,如果將偵聽器添加到JScrollPane - JScrollPane滾動停止工作。我需要滾動始終工作。我需要滾動工作無論何時何地。也許有一種方法可以讓事件不受阻塞? – user1221483 2012-03-24 22:08:22

+0

我有一個JScrollPane內的JTextArea。 (JTextArea的實際父代是JViewPort,JViewPort的父代是JScrollPane。)我將一個MouseWheelListener添加到JTextArea的getParent()。getParent(),它是JScrollPane,我同時獲得默認的滾動操作和我自定義的MouseWheelEvents。 (我使用mouseWheelEvent.isControlDown()放大/縮小JTextPane中的內容(通過增加或減小字體大小) – djb 2016-02-17 04:30:53