Frage

Alle,

Ich laufe in ein Problem mit JTextArea und JScrollPane. Aus irgendeinem Grund scheint die Bildlauffenster die letzte Zeile in dem Dokument nicht zu erkennen, und wird nur auf die Linie, bevor sie nach unten scrollen. Die Bildlaufleiste nicht einmal in einen Zustand zu ändern, wo ich es gleiten kann, bis die Linien in dem Dokument sind zwei größer ist als die Anzahl der Zeilen, die Textarea zeigt (es so bald geschehen sollte, wie es ist um eins größer ist).

Hat jemand laufen in diese vor? Was wäre eine gute Lösung sein (ich zu vermeiden, soll eine zusätzliche ‚leer‘ Linie bis zum Ende des Dokuments hinzuzufügen, die ich hätte jedes Mal entfernen ich eine neue Zeile hinzufügen)?

Hier ist, wie ich instanziiert die TextArea- und ScrollPane:

JFrame frame = new JFrame("Java Chat Program");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container pane = frame.getContentPane();
if (!(pane.getLayout() instanceof BorderLayout)) {
    System.err.println("Error: UI Container does not implement BorderLayout.");
    System.exit(-1);
}

textArea = new JTextArea();
    textArea.setPreferredSize(new Dimension(500, 100));
    textArea.setEditable(false);
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
JScrollPane scroller = new JScrollPane(textArea);
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    pane.add(scroller, BorderLayout.CENTER);

Dies ist die Methode, die ich verwende, um eine neue Zeile textarea hinzuzufügen:

public void println(String a)
{
    textArea.append(" "+a+"\n");
    textArea.setCaretPosition(textArea.getDocument().getLength());
}

Danke für Ihre Hilfe,

Jonathan

EDIT: Auch als eine Randnotiz, mit dem aktuellen Code habe ich nach unten manuell scrollen. Ich nahm an, dass setCaretPosition (doc.getLength ()) in der println (Linie) Verfahren würde die Seite nach unten automatisch eingestellt, nachdem eine Zeile eingegeben wird ... Sollte das der Fall sein, oder muss ich anders, etwas zu tun?

War es hilfreich?

Lösung

Das Problem ist textArea.setPreferredSize(new Dimension(500, 100));

entfernen, dass. Stellen Sie die perferredSize des scrollpane oder die Größe des Rahmens statt

Andere Tipps

Ist das eine Lösung? Ich habe es nicht testen, also bitte töte mich nicht.

scroller.getVerticalScrollBar().setValue(pane.getVerticalScrollBar().getMaximum());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top