2010-05-16 15 views
5

Podobnie jak wiele współczesnych myszy i trackpadów, mój laptop obsługuje przewijanie w pionie i poziomie. To uzależniająca funkcja, kiedy już się przyzwyczaisz. Po prostu chcę, aby moje aplikacje Java wspierały przewijanie w poziomie za pomocą gładzika/koła myszy, ale wszędzie, gdzie je szukam, wydaje się, że nie jest to możliwe w Javie.Jak używać gładzika do przewijania poziomego kółka myszy w Java AWT ScrollPane

naprawdę chcę, aby ktoś mi powiedzieć, że jestem jakoś robi to źle, ta funkcja jest już wymagane zachowanie: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440198

Niemożność zrobić prostą rzecz jest rzeczywiście brakło dla aplikacji jestem pracować nad. W rzeczywistości dla każdej aplikacji mogę wyobrazić! Zainwestowałem trochę czasu w backend Java, więc naprawdę chciałbym znaleźć rozwiązanie dla tej pozornie prostej rzeczy.

Pytanie, co mogę zrobić, aby wprowadzić to zachowanie? Czy surowe zdarzenia na poziomie systemu operacyjnego są nawet narażone na działanie java przez java, czy będę musiał napisać to od podstaw?

import java.awt.*; 

public class ScrollExample extends Canvas { 

    public void paint(Graphics g) { 

     g.setColor(Color.green); 
     g.fillOval(0,0,400, 400); 

    } 

    public static void main(String[] args) { 

     ScrollExample b = new ScrollExample(); 
     Frame f = new Frame ("Scroll Example"); 

     ScrollPane scroller = new ScrollPane (ScrollPane.SCROLLBARS_ALWAYS); 
     scroller.add(b,"Center"); 
     f.setPreferredSize(new Dimension(500,500)); 
     f.add ("Center",scroller); 
     f.pack(); 
     f.show(); 

    } 

} 

przykład Swing działa zarówno przewijania poziomego i pionowego

import java.awt.*; 
import javax.swing.*; 

public class ScrollExample extends JPanel { 

    public void paint(Graphics g) { 

     super.paint(g); 

     g.setColor(Color.green); 
     g.fillOval(0,0,400, 400); 

    } 

    public static void main(String[] args) { 

     JFrame f = new JFrame ("Scroll Example"); 
     ScrollExample p = new ScrollExample(); 
     p.setPreferredSize(new Dimension(1000, 1000)); 

     JScrollPane scroller = new JScrollPane(p,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scroller.getHorizontalScrollBar().setUnitIncrement(10); 
     scroller.getVerticalScrollBar().setUnitIncrement(10); 

     f.setPreferredSize(new Dimension(500,500)); 
     f.add (scroller,BorderLayout.CENTER); 
     f.pack(); 
     f.show(); 
    } 
} 

Odpowiedz

1

ta jest domyślnie obsługiwany w Swing chociaż pionowy scolling ma priorytet nad poziomego przewijania, gdy oba paski przewijania są widoczne.

Spodziewam się, że nowy rozwój zostanie wykonany w Swing nie AWT.

Edit:

powinny mieć możliwość korzystania z Mouse Wheel Controller dostosować prędkość przewijania. Nigdy nie próbowałem tego na przewijaniu poziomym, daj mi znać, jeśli to działa.

+0

Dzięki, Swing działa, aczkolwiek wolniej niż AWT, ale może to być domyślna konfiguracja koła. Naprawdę chciałem użyć AWT do sterowania OS, ale teraz zmienię na swing, większość mojego interfejsu i tak zostanie nadpisana przeze mnie. – blissapp

+0

Odnośnie komentarza dotyczącego powolnego przewijania zobacz moją edycję powyżej. – camickr

+0

Dzięki za aktualizację. Wypróbowałem tę klasę Mouse Wheel Controller, ale sprawiło, że Scrolling był powolny i nierówny na moim sprzęcie. Ostatecznym rozwiązaniem było użycie metody setUnitIncrement() na samych ScrollBars, dodałem szczegóły do ​​powyższego kodu. – blissapp

1

Zdarzenia nawigacyjne na gładziku MacBooka Pro są obsługiwane po wyjęciu z pudełka. Zauważ, że istnieje JScrollPane metoda aktywacji zdarzeń koła: setWheelScrollingEnabled

Powiązane problemy