JScrollPane et JList défilement automatique
J'ai donc le code suivant:
listModel = new DefaultListModel();
listModel.addElement(dateFormat.format(new Date()) + ": Msg1");
messageList = new JList(listModel);
messageList.setLayoutOrientation(JList.VERTICAL);
messageScrollList = new JScrollPane(messageList);
messageScrollList.setPreferredSize(new Dimension(500, 200));
messageScrollList.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
e.getAdjustable().setValue(e.getAdjustable().getMaximum());
}
});
Auto défile vers le bas. Mais, si j'essaie de revenir en arrière jusqu'à re-lire un message, il force un défilement vers le bas.
Comment puis-je résoudre ce problème?
OriginalL'auteur dododedodonl | 2010-01-25
Vous devez vous connecter pour publier un commentaire.
Lors de l'ajout d'un nouveau message, appeler
scrollRectToVisible()
sur leJList
à l'aide d'unRectangle
ayant les mêmes dimensions que votre message volet préféré de la taille. Donné une orientation verticale, il peut être pratique de faire la taille par défaut de laJScrollPane
'sJViewport
un multiple de la fenêtre de message de la hauteur. Voir aussi: Comment Utiliser le Défilement des Volets.Addendum: Cet irrésistible discussion de Zone de Texte Défilant peut être utile, aussi.
OriginalL'auteur trashgod
J'ai trouvé ce vraiment utile:
http://forums.sun.com/thread.jspa?threadID=623669 (post par "inopia')
Il fonctionne parfaitement
Comme il le dit:
"Le problème ici est que cela peut devenir un peu difficile de trouver un événement qui se déclenche après que les deux ListModel, JList et JScrollPane ont été mis à jour."
OriginalL'auteur mohsenof
OriginalL'auteur Gene De Lisa
@question, demande de renseignements. S'il vous plaît changer votre code d'
à
Changement
getMaximum()
àgetValue()
Puis il travaille en tant que de besoin.getMaximum()
prend la barre de défilement à son maximum; tandis quegetValue()
prend partout où l'événement se produit.Vous pouvez éviter d'utiliser ce bout de code tout à fait si vous mettez une ligne
Qui fonctionne comme
add(component)
pour jList et obtient son potentiel de comportement.OriginalL'auteur Any Body
À la fonction de défilement automatique, je suis en utilisant un concept très simple de la variable statique et de la liste.makeVisible(int index)
OriginalL'auteur Jay Dharmendra Solanki
J'ai utilisé
JScrollPane
avecJTextArea
. J'ai évité la force de faire défiler vers le bas par le défilement uniquement lorsqueJScrollBar max
valeur a changé:Je suppose, il y a une meilleure solution pour filtrer les événements sans variables supplémentaires, et apprécierais si quelqu'un à la poste.
OriginalL'auteur user9999
Je pense que ce que vous voulez faire est de les avoir faites défiler vers le bas lorsque vous ajoutez des trucs à votre messageList, plutôt que sur l'adaptation. Si votre code pourrait ressembler à ceci:
Sinon vous auriez besoin de dire si le réglage a été causé par un changement de modèle, ou par la souris, et à la recherche par le biais de l'API docs je ne sais pas si il existe un moyen de le faire facilement. Bien que vous pourriez voir si le
AdjustmentEvent.getAdjustmentType()
renvoie des valeurs différentes dans ces cas, si c'est vrai, alors peut-être vous avez une instruction if dans votre anonyme intérieur de la classe.Une autre chose que vous pourriez essayer serait de disposer d'une variable booléenne, quelque part, c'est quand vous ajouter quelque chose à la liste. Puis, dans votre gestionnaire vous de vérifier pour voir si la variable est définie. Si oui, vous ne le réglage (et de désactiver la variable) sinon, vous l'ignorez. De cette façon, il n'y aura qu'un défilement vers le bas par élément ajouté à la liste.
Hmm... eh Bien, une chose que vous pourriez faire serait d'avoir une variable booléenne quelque part c'est quand vous ajouter quelque chose à la liste. Puis, dans votre gestionnaire vous de vérifier pour voir si la variable est définie. Si oui, vous ne le réglage (et de désactiver la variable) sinon, vous l'ignorez. De cette façon, il n'y aura qu'un défilement vers le bas par élément ajouté à la liste.
OriginalL'auteur Chad Okere