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();
}
}
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
Odnośnie komentarza dotyczącego powolnego przewijania zobacz moją edycję powyżej. – camickr
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