Textbreite von Font inklusive Tabs ermitteln

igelwald

Mitglied
Hallo,

ich habe eine JTextArea implementiert und deren paint Methode erweitert, so dass ich ein Image für den Zeilenumbruch am Ende der Zeile zeichne. Das soll so ein Zeilenumbruchanzeige werden, wie es Word ja auch hat.

Das klappt auch ganz gut, nur klappt's nicht, wenn im Text ein Tabulator steht, weil die Methode
Java:
getFontMetrics(getFont()).stringWidth(text)
, die ich verwende mit nicht die Tabulatorbreite mitberechnet.

Daraufhin habe ich versucht mit die selbst zu berechnen mit
Java:
tabWidth = getFontMetrics(getFont()).charWidth('w') * getTabSize();

und das mit der Anzahl Tabs multipliziert.
Das sieht aber auch manchmal ziemlich schrecklich aus, besonders bei Texten mit schmalen Buchstaben und klappt auch nicht immer.


Hat jemand einen Tipp, wie man das hinbekommt?


Danke und Gruß,
igelwald
 

André Uhres

Top Contributor
Hallo Igelwald,

herzlich willkommen bei java-forum.org!

JTextArea verfügt über spezielle getLine...() Methoden, mit denen du dein Problem sicher lösen kannst:

getLineCount() Determines the number of lines contained in the area.
getLineEndOffset(int line) Determines the offset of the end of the given line.
...

Gruß,
André
 

igelwald

Mitglied
Hallo Andre,

danke für die Antwort.

Aber ich verstehe jetzt nicht, was ich mit diesen Methoden machen soll?

Meine Implementierung meiner abgeleiteten TextArea sieht bis jetzt vor das super.paint() der JTextArea zu verwenden und in meinem Code am Ende jeder Zeile ein Zeichen für Zeilenumbruch zu malen.
Mein Problem ist, dass ich nicht die exakten Koordinaten des jeweiligen Zeilenendes ermitteln kann, sobald ein Tabulator im Text vorkommt.
getLineEndOffset gibt mir ja nur, an welcher Stelle die Zeile umgebrochen wird, aber nicht die Koordinaten oder Zeilenbreite, damit ich zeichnen kann.

Vllt. ist meine Heransgehensweise mit der eigenen paint() Methode ja auch nicht optimal?


Gruss,
igelwald
 

André Uhres

Top Contributor
getLineEndOffset gibt mir ja nur, an welcher Stelle die Zeile umgebrochen wird, aber nicht die Koordinaten oder Zeilenbreite, damit ich zeichnen kann.
Du hast natürlich recht, ich glaube ich werde langsam alt :D.
Vllt. ist meine Herangehensweise mit der eigenen paint() Methode ja auch nicht optimal?
Ja, da hast Du wohl auch recht. Anstatt eine JTextArea, nimm doch lieber mal eine JTextPane (sie unterstützt eingebettete Komponenten).

Gruß,
André
 

igelwald

Mitglied
Hallo Andres,

in der Zwischenzeit habe ich auch eine Lösung für normale JTextAreas gefunden.

Dafür gibt's die Utilities aus java.lang.txt.Utilities.

int sWidth = Utilities.getTabbedTextWidth(new Segment(theText.toCharArray(), 0, theText.length()),
getFontMetrics(getFont()), 0,
(PlainView) getUI().getRootView(this).getView(0), 0);


Danke für die Hilfe.

Gruß,
igelwald
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
0 Ist "sequence.fallback" aus den font.properties zur Laufzeit änderbar AWT, Swing, JavaFX & SWT 0
I Anderes (schlechteres) Font-Rendering in OpenJDK 8 AWT, Swing, JavaFX & SWT 21
Splayfer Custom Font in AttributedString Java AWT, Swing, JavaFX & SWT 4
L JavaFX Eigene Font benutzen AWT, Swing, JavaFX & SWT 6
B AWT Font Größenverhältnisse AWT, Swing, JavaFX & SWT 2
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
L Font für Dashboard AWT, Swing, JavaFX & SWT 3
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
S Swing JColorChooser Font ändern AWT, Swing, JavaFX & SWT 2
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
A AWT TTF-Datei zu Font-Objekt finden? AWT, Swing, JavaFX & SWT 5
Y Globale Font-Color definieren AWT, Swing, JavaFX & SWT 5
F java.awt.Font - ist das wirklich alles? AWT, Swing, JavaFX & SWT 3
Luk10 Ungewollte Unicode Characters im Font AWT, Swing, JavaFX & SWT 5
S Font laden, Wort zeichnen und animieren..? AWT, Swing, JavaFX & SWT 2
M Font Size in FormsEditor AWT, Swing, JavaFX & SWT 2
F Font in JTable setzen AWT, Swing, JavaFX & SWT 7
1 Font ändern AWT, Swing, JavaFX & SWT 5
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
Dit_ Font durchgestrichen AWT, Swing, JavaFX & SWT 6
B Welche Font Family ist vorhanden? AWT, Swing, JavaFX & SWT 3
N Swing JEditorPane mit Farbe und Font AWT, Swing, JavaFX & SWT 2
G Frame,Font,Standard,Schriftart,JFrame AWT, Swing, JavaFX & SWT 3
M JSpinner Font ändern AWT, Swing, JavaFX & SWT 4
H anderes font in textarea AWT, Swing, JavaFX & SWT 2
Schandro Den größten passenden java.awt.Font zu einem Rectangle berechnen AWT, Swing, JavaFX & SWT 2
D Font laden AWT, Swing, JavaFX & SWT 2
T Font mit Border AWT, Swing, JavaFX & SWT 7
Fu3L Wie Schriftfarbe und Font global setzen? AWT, Swing, JavaFX & SWT 5
J Font Änderung nach Editorwechsel? AWT, Swing, JavaFX & SWT 3
A Font: Ist Schriftart überall verfügbar? AWT, Swing, JavaFX & SWT 4
I font-größe ermitteln AWT, Swing, JavaFX & SWT 4
S jTable Font einer Zelle ändern AWT, Swing, JavaFX & SWT 5
StephenKing Font-Größe in JTextField normalisieren AWT, Swing, JavaFX & SWT 6
DEvent Standard Font-Auswahl-Dialog? AWT, Swing, JavaFX & SWT 15
I GUI - Font und Labelklick AWT, Swing, JavaFX & SWT 6
S JTree - Renderer - Font AWT, Swing, JavaFX & SWT 3
R Schriftfarbe ändern in JTextArea / Font bekommen AWT, Swing, JavaFX & SWT 2
V Font setzen in JLabel AWT, Swing, JavaFX & SWT 6
M Schwieriges Label - Font - Problem "Dynamisches Label&a AWT, Swing, JavaFX & SWT 7
TheJavaKid font lässt sich bei der jtextarea nur einmal ändern AWT, Swing, JavaFX & SWT 3
G Font in JTextArea ändern AWT, Swing, JavaFX & SWT 2
I Font 2 Vektor AWT, Swing, JavaFX & SWT 3
V falscher Unicode font AWT, Swing, JavaFX & SWT 6
S Hilfe bei java.awt.Font AWT, Swing, JavaFX & SWT 7
H Create Font will nicht AWT, Swing, JavaFX & SWT 5
G Font tiefergestellt AWT, Swing, JavaFX & SWT 2
G Font nur für einen Teil String im JTextArea AWT, Swing, JavaFX & SWT 5
H Liste von Font Sizes und Colors AWT, Swing, JavaFX & SWT 4
D Font eines JLabels verändern, JLabel mit LookAndFeel-Format AWT, Swing, JavaFX & SWT 2
B Font fett setzen AWT, Swing, JavaFX & SWT 2
L JavaFX Pane inklusive Inhalt der Bildschirm Auflösung anpassen AWT, Swing, JavaFX & SWT 13

Ähnliche Java Themen

Neue Themen


Oben