Desidero convertire un testo arbitrario in una forma (java.awt.Shape
) e quindi tracciare/riempire la forma per disegnarla. Come posso fare questo?java/swing: conversione di una stringa di testo in una forma
risposta
Hm non sapevo la risposta a questo, ma dopo un po 'di tweaking e rovistando con contenuti Eclipse assistere ho trovato questo che sembra essere quello che ti serve:
EDIT: ho cambiato a codice per modificare il modo in cui viene visualizzata la stringa che è la ragione per cui hai chiesto cosa hai chiesto :) Provalo. Rende la stringa con il colore rosso e un contorno tratteggiato
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.font.GlyphVector;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JPanel{
private Shape s;
public Test() {
Font f = getFont().deriveFont(Font.BOLD, 70);
GlyphVector v = f.createGlyphVector(getFontMetrics(f).getFontRenderContext(), "Hello");
s = v.getOutline();
setPreferredSize(new Dimension(300,300));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.translate(100, 150);
g2.rotate(0.4);
g2.setPaint(Color.red);
g2.fill(s);
g2.setPaint(Color.black);
g2.setStroke(new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[]{1,0.4f,1.5f}, 0));
g2.draw(s);
}
public static void main(String[] args) {
JFrame f = new JFrame("Test");
Component c = new Test();
f.getContentPane().add(c);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
Si noti inoltre che è possibile ottenere i singoli caratteri dalla stringa chiamando:
getGlyphOutline(glyphIndex)
Grande: lo accetto perché è un esempio completo e comprensibile. Sono perplesso perché sembra che ci siano due modi per farlo. L'approccio di GlyphVector che hai usato e l'approccio TextLayout con cui @objects ha risposto. Non sono sicuro quali siano i vantaggi/gli svantaggi di ciascuno .... oltre a un font e una stringa di testo, GlyphVector() sembra prendere solo un FontRenderContext, ma TextLayout accetta un FontRenderContext e un AffineTransform. –
in effetti ... Sarebbe interessante ascoltare un dipendente Sun (o qualcuno che ha esperienza in materia) sulle differenze. Sembra che TextLayout sia usato per molte operazioni relative al glifo di testo come forme di caret, commutazione di caratteri ... Inizialmente pensavo che uno dei due debba essere una nuova aggiunta all'API ma da quello che posso vedere entrambe le classi esistevano nella 1.4 API (per me e molti questa è la prima versione abbastanza degna da essere chiamata Java: P). –
Se ho capito bene, questo non è per affrontare la risposta esatta, ma è un inizio ...
//Rough pseudo code
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.TexturePaint;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = (Graphics2D)image.getGraphics();
//Paint with texturing brush
Rectangle2D rect2D = new Rectangle2D.Double(0, 0, width, height);
graphics.setPaint(new TexturePaint(image, rect2D));
graphics.fill(rect2D);
//Draw text
graphics.drawString("my text goes here", xPos, yPos);
In sintesi,
- Creare un oggetto
BufferedImage
diwidth
eheight
eImageType
. - Ottiene l'oggetto
Graphics
dell'immagine. - della vernice che la grafica come per favore (cioè creare un rettangolo, cerchio, testo, ecc)
- Scrivi quell'immagine in un flusso (file, ServletRequest, ecc)
Grazie, ma voglio rimanere in grafica vettoriale –
Ti suggerisco di diventare più discreto con la tua domanda allora @Jason S. Stiamo cercando di aiutare, ma non possiamo leggere quello che hai in mente. –
?? Apprezzo l'aiuto, ma la mia domanda ha chiesto in particolare come convertire il testo in una forma, come in 'java.awt.Shape'. –
Utilizzare la classe TextLayout (vedi il metodo getOutline()). C'è un esempio here
+1: guarda il mio commento sulla risposta di @Sawas –
a quanto pare le nostre risposte sono corrette ... :) –
questo esempio è un po 'più compatto, molto più ordinato della risposta accettata. http: //www.java2s.com/Codice/Java/2D-grafica-GUI/OutlineFontpaint.htm – planty182
- 1. Conversione di una stringa in una data in una cella
- 2. F #: conversione di una stringa in una serie di byte
- 3. Conversione di una stringa in un doppio
- 4. conversione di byte in una stringa C#
- 5. Conversione di una stringa in BigInteger
- 6. conversione di una stringa in dizionario Python
- 7. Conversione di una stringa in una data in DB2
- 8. Conversione di una stringa in un tipo di dati float
- 9. conversione di una stringa di digitare UTCTime
- 10. È già presente una stringa in una normale forma di compatibilità nella corrispondente forma canonica normale?
- 11. Conversione di una stringa in un elenco in Python
- 12. conversione di una stringa a DateTime
- 13. Conversione di argv su una singola stringa
- 14. Conversione di una stringa con fuso orario
- 15. Come posso trasformare una stringa in una forma abbreviata?
- 16. conversione più righe di testo in una cornice di dati
- 17. Conversione di contenuto di HtmlTextWriter in una stringa
- 18. conversione di una stringa di tempo per secondi in python
- 19. Conversione di una stringa in un costante definita in PHP
- 20. conversione di stringa in una doppia variabile in C
- 21. Conversione di un intero in una stringa in PHP
- 22. Conversione di un byte in una stringa binaria in C#
- 23. Conversione di un array in una stringa in AS3
- 24. conversione di una stringa data in millisecondi in java
- 25. Conversione di una stringa in numero intero in Schema
- 26. Chiusura di una forma da un'altra forma?
- 27. Come estrarre il testo in una stringa di testo
- 28. Android Forma all'interno di una forma
- 29. Golang: problemi in sostituzione di una nuova stringa in una stringa da un file di testo
- 30. Trasforma una stringa NSAattribuita in testo semplice
Non sai cosa intendi qui. Puoi elaborare? Vuoi che il testo diventi le forme dei personaggi nel testo? – Holograham