Comme beaucoup de souris et de trackpads modernes, mon ordinateur portable supporte le défilement vertical et horizontal. C'est une fonctionnalité addictive une fois que vous vous y êtes habitué. Je veux simplement que mes applications Java supportent le défilement horizontal via le trackpad/mousewheel, mais partout où je cherche il semble que ce n'est pas possible en Java.Comment utiliser mon trackpad pour le défilement horizontal de la molette de la souris dans un Java AWT ScrollPane
Je veux vraiment que quelqu'un me dise que je suis en quelque sorte faire mal, cette fonction est le comportement déjà demandé: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440198
L'incapacité à faire cette chose simple, est en fait un élément rédhibitoire pour l'application que je suis travaille sur. En fait, pour toute application que je peux imaginer! J'ai investi un peu de temps dans le backend Java, alors j'aimerais vraiment trouver une solution pour cette chose apparemment simple.
Question est ce que je pourrais faire pour implémenter ce comportement? Est-ce que les événements au niveau OS brut me sont même exposés par java, devrais-je alors écrire cela à partir de zéro?
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();
}
}
exemple Swing fonctionne avec le défilement horizontal et vertical
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();
}
}
Merci, Swing fonctionne, mais plus lentement que AWT, mais cela pourrait être la configuration par défaut de la roue. Je voulais vraiment utiliser AWT pour les contrôles du système d'exploitation, mais je vais maintenant basculer à la place, la plupart de mon interface utilisateur sera écrasée par moi de toute façon. – blissapp
En ce qui concerne le commentaire sur le défilement lent, voir ma modification ci-dessus. – camickr
Merci pour la mise à jour. J'ai essayé cette classe de contrôleur de molette de souris, mais cela a rendu le défilement lent et saccadé sur mon matériel. Ma solution finale consistait à utiliser la méthode setUnitIncrement() sur les ScrollBars eux-mêmes, j'ai ajouté les détails au code ci-dessus. – blissapp