Wort aus Einzelbuchstaben rendern?

sirbender

Top Contributor
Hi,

ich habe den Shape fuer das Wort 'Text' generiert. Ich koennte das Wort 'Text' also zeichnen. Was ich aber machen will ist die Shapes fuer jeden einzelnen Buchstaben von 'Text' zu generieren und dann das Wort 'Text' Buchstabe fuer Buchstabe (also Shape fuer Shape) zu zeichnen. Um das zu tun braeuchte ich aber die Position der einzelnen Buchstaben.

Weiss jemand wie ich das mache?

Danke,
sb
 

André Uhres

Top Contributor
Versuch's mal so:
Java:
String text = "Text";
int textWidth;
char[] chars = text.toCharArray();
shapes = new Shape[chars.length];
FontRenderContext frc = new FontRenderContext(null, true, true);
Font font = new Font("Arial", Font.BOLD, 30);
double maxHeight = 0;
for (int j = 0; j < chars.length; j++) {
    String s = String.valueOf(chars[j]);
    shapes[j] = new TextLayout(s, font, frc).getOutline(null);
    Rectangle2D bounds = shapes[j].getBounds2D();
    if (bounds.getHeight() > maxHeight) {
        maxHeight = bounds.getHeight();
    }
}
TextLayout tl = new TextLayout(text, font, frc);
textWidth = (int) tl.getOutline(null).getBounds().getWidth();
int w = 100;
int h = 50;
float charWidth = w / 2 - textWidth / 2;
for (int j = 0; j < chars.length; j++) {
    Rectangle2D bounds = shapes[j].getBounds2D();
    AffineTransform at = new AffineTransform();
    at.translate(charWidth, h / 2 + maxHeight / 2);
    charWidth += (float) bounds.getWidth() + 3;
    shapes[j] = at.createTransformedShape(shapes[j]);
}
 

sirbender

Top Contributor
Danke. Mein Problem ist hier dass die Buchstaben equidistant gezeichnet werden. Ich will sie aber die einzelnen Shapes so zeichnen als waere das Wort 'gelayoutet' worden...so ist z.B. zwischen 'x' und 't' beim Wort Text kaum ein abstand beim rendern.

Wenn ich new TextLayout("Text", font, frc).getOutline() aufrufe bekomme ich einen einzelnen 'Text-Shape'. Ich haette gerne je einen Shape mit der RICHTIGEN Position fuer jeden der Buchstaben in diesem 'Text-Shape'.
 

André Uhres

Top Contributor
Wir können mit TextLayout den offset für jeden Buchstaben rechnen lassen, etwa so:
Java:
String text = "Text";
char[] chars = text.toCharArray();
float[] offsets = new float[chars.length];
shapes = new Shape[chars.length];
FontRenderContext frc = new FontRenderContext(null, true, true);
Font font = new Font("Arial", Font.BOLD, 30);
double maxHeight = 0;
for (int j = 0; j < chars.length; j++) {
    String s = String.valueOf(chars[j]);
    shapes[j] = new TextLayout(s, font, frc).getOutline(null);
    Rectangle2D bounds = shapes[j].getBounds2D();
    if (bounds.getHeight() > maxHeight) {
        maxHeight = bounds.getHeight();
    }
    if (j == 0) {
        offsets[j] = 0;
    } else {
        offsets[j] = new TextLayout(new String(chars, 0, j), font, frc).getAdvance();
    }
}
int h = 50;
for (int j = 0; j < chars.length; j++) {
    AffineTransform at = new AffineTransform();
    at.translate(offsets[j], h / 2 + maxHeight / 2);
    shapes[j] = at.createTransformedShape(shapes[j]);
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X JTextPane automatischer Zeilenumbruch IM Wort AWT, Swing, JavaFX & SWT 2
S Font laden, Wort zeichnen und animieren..? AWT, Swing, JavaFX & SWT 2
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
destroflyer Wort im JLabel verlinken (per HTML) AWT, Swing, JavaFX & SWT 3
J Wort aus Arrayliste selektieren und ID anzeigen lassen AWT, Swing, JavaFX & SWT 6
D Swing JEditorPane wort zu lang AWT, Swing, JavaFX & SWT 11
G Ein Wort in einem String färben in einer Canvas AWT, Swing, JavaFX & SWT 10
P JCheckBox: das 4eck mit kreuz soll rechts vom wort stehen AWT, Swing, JavaFX & SWT 3
T JTextPane, Mausklick, aktives Wort AWT, Swing, JavaFX & SWT 2
Yonnig Lokale HTML-Datei in Java GUI rendern AWT, Swing, JavaFX & SWT 4
J Falsches Rendern durch JCheckBox in eigenem JTree AWT, Swing, JavaFX & SWT 6
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
M Sauberes Rendern ? AWT, Swing, JavaFX & SWT 12
P Rendern von Geraden im 3 dimensionalen Raum durch Rotationen AWT, Swing, JavaFX & SWT 0
Luk10 Effizienteres CPU-Rendern AWT, Swing, JavaFX & SWT 33
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
B Label breite ermitteln vor dem rendern? AWT, Swing, JavaFX & SWT 7
K JLabel neu rendern AWT, Swing, JavaFX & SWT 5
M 2D-Grafik Offscreen-Rendern von Bildern AWT, Swing, JavaFX & SWT 2
TiME-SPLiNTER Swing JListModel: String rendern AWT, Swing, JavaFX & SWT 2
E JPanel in BufferdImage rendern problem AWT, Swing, JavaFX & SWT 2
S Swing JScrollpane Inhalt auswechseln und neu rendern?! AWT, Swing, JavaFX & SWT 5
Kr0e Text rendern AWT, Swing, JavaFX & SWT 11
Kr0e Swing in Bild rendern AWT, Swing, JavaFX & SWT 7
D Area rendern AWT, Swing, JavaFX & SWT 4
D Bild rendern AWT, Swing, JavaFX & SWT 8
S JTree rendern der Knoten [+] und [-], nicht der Node Icons AWT, Swing, JavaFX & SWT 2
R JTable - Rendern der einzelnen Zellen AWT, Swing, JavaFX & SWT 3
P Unsichtbare Komponente in ein Bild rendern? AWT, Swing, JavaFX & SWT 11
I Text innerhalb von Rectangle rendern AWT, Swing, JavaFX & SWT 3
S Automatisches Rendern einen JPanels AWT, Swing, JavaFX & SWT 8
F JTree: Elemente über ganze Zeile rendern AWT, Swing, JavaFX & SWT 6
M rendern von zeichen AWT, Swing, JavaFX & SWT 4
N Textfelder = Inhalt vorhanden && Jtable rendern AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben