hi ihr Javagurus!
Brauche eure Hilfe bei folgendem Problem:
Ich hab mir schon den Kopf rot geärgert => :mad: weil ich nicht draufkomme, wie es möglich ist, ein JTextPane so zu realisieren, dass Text, der in diesem Pane ausgegeben wird, immer bis ans Ende gescrollt ist, also der Scrollbalken soll immer ganz unten sein, sodass man die letzte Zeile lesen kann.
Man kann sich das so vorstellen wie ein Console-Output, wo die neuesten Nachrichten unten angefügt werden sollen: nur will ich indemfall, dass bestimmte Nachrichten farbig ausgegeben werden, weswegen ich ein JTextPane nehmen muss und keine TextArea. Die TextArea von AWT erledigt das automatisch, dass nach unten gescrollt wird, hat jedoch nur 1 einzige Farbe für den Text. Deswegen musste ich mich mit TextPane auseinandersetzen.
Ich hab schon soviel Lösungsansätze versucht, aber der Scrollbalken will partout nicht runterscrollen. Der letzte Versuch war der, wo es geheissen hat: "man soll die Position vom Cursor ganz an den Schluss hin setzen, weil er dann automatisch zum Schluss scrollt".
Wenn man sich mein Beispiel aber ansieht, sieht man, dass der Cursor zwar an der Endposition ist, aber DENNOCH nicht gescrollt ist. Ich bin mit meinem Latein am Ende und weiss nicht mehr weiter.
Kann sich vielleicht das jemand anschauen, wieso bei mir das nicht geht, oder einen Lösungsansatz? Würd mich wahnsinnig freuen.
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
public class TextSamplerDemo2 extends JPanel
{
StyledDocument doc;
JTextPane textPane;
JScrollPane scrollPane;
JPanel panel;
Style def,s;
public TextSamplerDemo2()
{
setLayout(new BorderLayout());
textPane = new JTextPane();
textPane.setPreferredSize(new Dimension(250, 120));
doc = textPane.getStyledDocument();
def = StyleContext.getDefaultStyleContext().
getStyle(StyleContext.DEFAULT_STYLE);
s = doc.addStyle("style1", null);
StyleConstants.setForeground(s,Color.RED);
scrollPane = new JScrollPane(textPane);
panel = new JPanel(new GridLayout(1,0)); // GridLayout notwendig weil scrollbars beim resizen des fensters sonst verschwinden (!?!)
panel.add(scrollPane);
add(panel,BorderLayout.CENTER);
printsomelines();
textPane.setCaretPosition(doc.getLength()); // setze Cursor an schluss
}
public void printsomelines()
{
String harr = "adhawjkdhwajkdhawdhwa\nadhawjkdhwajkdhawdhwa\nadhawjkdhwajkdhawdhwa\nadhawjkdhwajkdhawdhwa";
String hark = "adhawjkdhwajkdhawdhwad akwdjhawkjdhkwadhkwadhwkahdkwahdkwhdkawhdkawhd!";
try
{
doc.insertString(doc.getLength(),harr,doc.addStyle("style1",s));
doc.insertString(doc.getLength(),harr,doc.addStyle("style1",s));
doc.insertString(doc.getLength(),hark,doc.addStyle("style1",def));
doc.insertString(doc.getLength(),hark,doc.addStyle("style1",def));
}
catch(BadLocationException bled){}
}
public static void main(String[] args)
{
JFrame frame = new JFrame("TextSamplerDemo2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TextSamplerDemo2());
frame.pack();
frame.setVisible(true);
}
}
Alles anzeigen