2012-03-24 4 views

ответ

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. JEditorPane содержит в себе прокрутку, поэтому, если вы добавите слушателя на JEditorPane, JScrollPane прекратит принимать события. Вот почему у вас есть проблема. Вместо этого лучше добавить слушателя в JScrollPane.

+0

но если добавить слушателя в JScrollPane - в свитке JScrollPane перестает работать. Мне нужно прокручивать, всегда работал. Мне нужно прокручивать работу, когда и где угодно. Может быть, есть способ получить событие без блокировки? – user1221483

+0

У меня есть JTextArea внутри JScrollPane. (Фактический родитель JTextArea - это JViewPort, а родительский JViewPort - это JScrollPane.) Я добавляю MouseWheelListener к getParent() getTarAccess(), который является JScrollPane, и я получаю как прокрутки по умолчанию, так и мои пользовательские MouseWheelEvents. (Я использую mouseWheelEvent.isControlDown() для увеличения/уменьшения содержимого в JTextPane (путем увеличения или уменьшения размера шрифта) – djb

Смежные вопросы