Je tente d'impliquer smart autoscrolling sur un JScrollPane contenant un JTextPane. Le JTextPane est utilisé pour la connexion de mon application en couleur. Cependant, je cours dans un mur en essayant de faire un auto-défilement intelligent. Par autoscrolling intelligent, je ne veux pas dire aveuglément autoscrolling chaque fois que quelque chose change, je veux dire vérifier pour voir si vous avez fait défiler tout le chemin, puis autoscroll. Cependant, peu importe ce que je fais soit autoscrolls toujours ou ne pas du toutSmart JScrollPane autoscrolling
En tant que script de test, voici la configuration (la JFrame a été laissé)
final JTextPane textPane = new JTextPane();
textPane.setEditable(false);
final JScrollPane contentPane = new JScrollPane(textPane);
contentPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Et voici l'auto laid ajouter essai boucle
while (true)
try {
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
JScrollBar scrollBar = scroll;
boolean preCheck = ((scrollBar.getVisibleAmount() != scrollBar.getMaximum()) && (scrollBar.getValue() + scrollBar.getVisibleAmount() == scrollBar.getMaximum()));
System.out.println("Value: " + scroll.getValue()
+ " | Visible: " + scrollBar.getVisibleAmount()
+ " | Maximum: " + scrollBar.getMaximum()
+ " | Combined: " + (scrollBar.getValue() + scrollBar.getVisibleAmount())
+ " | Vis!=Max : " + (scrollBar.getVisibleAmount() != scrollBar.getMaximum())
+ " | Comb=Max: " + (scrollBar.getValue() + scrollBar.getVisibleAmount() == scrollBar.getMaximum())
+ " | Eval: " + preCheck);
StyledDocument doc = textPane.getStyledDocument();
doc.insertString(doc.getLength(), "FAGAHSIDFNJASDKFJSD\n", doc.getStyle(""));
if (!preCheck)
textPane.setCaretPosition(doc.getLength());
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
Ce n'est pas joli, mais cela fait l'affaire.
est ici que le chèque correspondant
boolean preCheck = ((scrollBar.getVisibleAmount() != scrollBar.getMaximum()) && (scrollBar.getValue() + scrollBar.getVisibleAmount() == scrollBar.getMaximum()));
if (preCheck)
textPane.setCaretPosition(doc.getLength());
thats la partie des thats été de me donner du mal. Il y a d'abord un contrôle pour voir si la barre est visible mais inutilisable (pas assez de texte, faisant de la barre toute la longueur), puis si le bas de la barre est égal au maximum. En théorie, cela devrait fonctionner. Cependant, rien, y compris le déplacement du chèque, n'a obtenu les résultats que je voudrais.
Des suggestions?
PAS UN DUPLICATA de this ou this, comme ils le veulent toujours faire défiler, pas seulement parfois.
Avez-vous trouvé l'erreur? J'ai exactement la même tâche, et, vraiment, je n'arrive toujours pas à trouver la solution. –