JTextPane frage

Freak2k

Erfahrenes Mitglied
Hey,

folgende zwei Fragen:

Code:
JFrame frame = new JFrame("TestFrame");
JTextPane textPane = new JTextPane();
JScrollPane scrollPane = new JScrollPane(textPane):
frame.getContentPane().add(scrollPane);
frame.pack();
frame.setVisible(true);

wie kann ich waehrend der Laufzeit die Groesse der textPane aendern?
setSize() funktioniert ab und zu....dann wird jedoch nur die Horizontale Scrollbar angezeigt.

setPrefferedSize() zeigt keine aenderungen...

ich brauche jedoch eine Textpane, deren groesse ich beliebig einstellen kann. und die auch als Mindestgroesse eingehalten wird.
setMinimumSize() zeigt auch keine wirkung :(

zweite Frage:
sollte die entsprechende TextPane auch die Moeglichkeit bieten, den Cursor frei zu positionieren.

geht das mit Java eigenen?

thx!
 
Wenn du eine bestimmte Größe benutzten möchtest solltest du pack() nicht benutzen, da die Größe sonst automatisch berechnet wird.

Innerhalb der TextPane kannst du mit setCarePosition die Position des Carets setzen (also dahin setzen wo die Eingabe beginnen soll).
 
wenn ich pack nicht verwende, wird das fenster ganz klein angezeigt und ich kann die groesse des in der scrollpane liegenden textpanes trotzdem nicht aendern.

Das Positionieren, des Cursor hast du vielleicht falsch verstanden.
Angenommen ich habe ein leere textpane, dann moechte ich den Cursor trotzdem irgendwo in die mitte setzen koennen und ab da anfangen zu tippen.
 
Ich habe es nicht falsch verstanden, du hast es unzureichend erklärt. Nen Cursor ist der Mauszeiger. Da wo man tippt ist das Caret.

Und du musst natürlich die größe des Frames auch setzen wenn du pack nicht benutzt.

Einfach mal rumprobieren, dann kann man das auch gut selbst raufinden. Die API ist immer ein netter Helfer...
 
Ich habe es nicht falsch verstanden, du hast es unzureichend erklärt. Nen Cursor ist der Mauszeiger. Da wo man tippt ist das Caret.
Ok, dann hab ichs einfach nur falsch ausgedrueckt....
Nur leider funktioniert es nicht....ich moechte das Caret frei positionieren koennen...auch in einer leeren textpane...

Und du musst natürlich die größe des Frames auch setzen wenn du pack nicht benutzt.

Einfach mal rumprobieren, dann kann man das auch gut selbst raufinden. Die API ist immer ein netter Helfer...
auch dann funktioniert es nicht....
wenn ich die groesse einer JTextPane in einer JScrollPane aendern will, passiert nichts und bei einer JEditorPane wird nur die Horizontale Scrollbar angezeigt.

Obwohl die ScrollPane nur ca. 200x200px gross ist und ich die groesse des TextPanes auf 1000x1000 setze... (per setPreferredSize(), setMinimumSize(). ... und revalidate());
 
Hallo,
da du einen JScrollPane benutzt, musst du dessen Größe ändern, dann ändert sich die Größe des JTextPane automatisch mit. Wenn Du preferredSize von JTextPane änderst, ohne den JScrollPane zu ändern, passiert genau das, was du beschrieben hast: es erscheint ein (oder zwei) Scrollbalken.
pack() nicht zu verwenden halte ich für keine gute Idee, zumindest dann nicht, wenn du noch andere Controls auf deinem JFrame oder JDialog hast.

Den Caret in einem leeren JTextPane in der Mitte zu positionieren ist nicht möglich. Das Caret kann nur eine Position annehmen, die einer Textstelle im Document entspricht; da die Länge des Document aber bei leerem JTextPane 0 ist, kann das Caret auch nur oben links positioniert werden.
Das ist übrigens in anderen Textverarbeitungseditoren (z.B. Word) nicht anders.
Gruß
testalucida
 
Zurück