Hallo. Ich hab mal zwei (wahrscheinlich sehrl simple) Fragen.
1: Wie kann man bei der JScrollPane den vertikalen Scrollbalken nach ganz oben setzten?
2: Kann ich in eine JTextArea auch geziehlt hinein schreiben. Sprich in eine Bestimmte Zeile, an eine Bestimmte Stelle von links?
2. Das is n bischen zu aufwändig. Ich schreibe ein Programm, bei dem ich erst einen String in eine Zeile setzten will, dann ab der Mitte der Zeile einen anderen. Da müsste ich vorher erstmal die länge des ersten Strings nehmen, die Zeichen bis zur mitte errechnen und dann beim Zweiten Spaces an den anfang fügen.
1. sry geht auch anders: nutz die methode setCaretPosition(0) der textarea
2. anders wüsste ich nix.. es gibt zwar irgendwas mit der Klasse Document mit der man glaub ich an bestimmten stellen was einfügen kann - aber weiß leider nix konkretes
sry, aber
text.setCaretPosition(0);
funktioniert leider genauso wenig, weder wenn ich es nach ausgabe des Textes setzte, noch davor, noch vor dem adden in die Pane
ok - gestehe mein Fehler ein...
allein die Caretposition hilft da nichts - sie setzt nur den Cursor dorthin, aber nicht die scrollbar....
diesmal verprech ichs dir dass es klappt (bei mir hat es geklappt)...
du musst deiner Scrollbar einen AdjustmentListener hinzufügen.
Code:
JTextArea area = new JTextArea();
area.setLineWrap(true);
area.setWrapStyleWord(true);
final StringBuilder b = new StringBuilder();
for (int i = 0; i < 1000; i++) {
b.append(i);
}
area.setText(b.toString());
area.setCaretPosition(b.length());
JScrollPane s = new JScrollPane(area);
s.setPreferredSize(new Dimension(200, 200));
JScrollBar bar = s.getVerticalScrollBar();
bar.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
e.getAdjustable().setValue(b.length());
}
});
das programm macht zwar die andere Richtung, d.h. es setzt die Sicht nach unten, aber das Prinzip sollte klar sein... also einen adjustmentlistener hinzufügen, und bei dir einfach dann immer auf 0 setzen lassen
Ich habe gerade was ziehmlich komisches festgestellt. Der führt keinen Befehl aus, der hinter der while-Schleife, noch im Try-Block steht. Also dort wo bei meinen geposteten Quelltext: text.setCaretPosition(0); steht.
Aber das steht doch noch im ActionListener und sollte bei drücken des Buttons ausgeführt werden... oder?
java.lang.NullPointerException
at Dic.actionPerformed(Dic.java:60)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)