JScrollPane und JList automatisch scrollen
Habe ich den nächsten code:
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());
}
});
Es automatisch scrollt. Aber, wenn ich versuche nach oben zu scrollen um wieder eine Nachricht Lesen, es zwingt einen nach unten scrollen.
Wie kann ich dieses Problem beheben?
InformationsquelleAutor dododedodonl | 2010-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim hinzufügen einer neuen Nachricht, rufen Sie
scrollRectToVisible()
auf dieJList
mit einemRectangle
mit den gleichen Abmessungen wie Ihre Nachricht im Fenster bevorzugte Größe. Angesichts einer vertikalen Ausrichtung, kann es zweckmäßig sein, um die bevorzugte Größe desJScrollPane
'sJViewport
ein ganzzahliges Vielfaches der Nachrichtenbereich ist die Höhe. Siehe auch: die How to Use Scroll Panes.Nachtrag: Dieser überzeugende Diskussion der die - Text-Bereich Scrollen kann hilfreich sein, auch.
InformationsquelleAutor trashgod
Ich fand diese sehr hilfreich:
http://forums.sun.com/thread.jspa?threadID=623669 (Beitrag von 'inopia')
Es funktioniert perfekt
Als er sagt:
"Das problem hier ist, dass es kann ein wenig schwierig zu finden, ein Ereignis, das ausgelöst wird, nachdem die beiden die das listmodel, JList und JScrollPane aktualisiert wurden."
InformationsquelleAutor mohsenof
InformationsquelleAutor Gene De Lisa
@Frage enquirer. Bitte ändern Sie Ihren code aus
zu
Ändern
getMaximum()
zugetValue()
Dann funktioniert es wie gewünscht.getMaximum()
nimmt den scroller zu Ihrer maximalen; währendgetValue()
dauert es, wo immer geschieht.Können Sie vermeiden, mit diesem Stück code zusammen, wenn Sie eine Zeile
Funktioniert wie
add(component)
für jList und bekommt seine inhärenten Verhalten.InformationsquelleAutor Any Body
Auto-scroll-ich bin mit einem sehr einfachen Konzept der statischen Variablen und Liste.makeVisible(int index)
InformationsquelleAutor Jay Dharmendra Solanki
Ich verwendet
JScrollPane
mitJTextArea
. Ich vermied Kraft Blättern Sie nach unten durch scrollen nur, wennJScrollBar max
Wert geändert:Ich nehme an, es gibt eine bessere Lösung zum filtern von Ereignissen, ohne dass zusätzliche Variablen, und wäre dankbar, wenn jemand es posten.
InformationsquelleAutor user9999
Ich denke, was Sie tun möchten, müssen Sie nach unten scrollen, wenn Sie Dinge hinzufügen, um Ihre messageList, dann eher auf Anpassung. So könnte der code wie folgt Aussehen:
Sonst würden Sie sich sagen müssen, wenn die Anpassung war bedingt durch ein Modell zu ändern, oder mit der Maus, und suchen durch den API-docs bin ich mir nicht sicher, ob es einen Weg gibt, um das leicht tun. Obwohl man sehen kann, ob die
AdjustmentEvent.getAdjustmentType()
gibt unterschiedliche Werte in diesen Fällen, wenn das stimmt, dann könnte man einfach haben, eine if-Anweisung in der anonymen inneren Klasse.Andere Sache, die Sie versuchen könnte, wäre eine Boolesche variable irgendwo, dass festgelegt wird, wenn Sie etwas hinzufügen zu der Liste. Dann, in der Prozedur, die Sie überprüfen, um zu sehen ob die variable gesetzt ist. Wenn dem so ist, brauchen Sie die Einstellung (und unset variable), sonst, Sie ignorieren es. So gibt es nur eine scroll-down-pro Element wird der Liste Hinzugefügt.
Hmm... Naja, eine Sache, die Sie tun könnten, wäre, um eine boolean-variable irgendwo, dass festgelegt wird, wenn Sie etwas hinzufügen zu der Liste. Dann, in der Prozedur, die Sie überprüfen, um zu sehen ob die variable gesetzt ist. Wenn dem so ist, brauchen Sie die Einstellung (und unset variable), sonst, Sie ignorieren es. So gibt es nur eine scroll-down-pro Element wird der Liste Hinzugefügt.
InformationsquelleAutor Chad Okere