Musterlösung zum zeichnen und drucken von StyledDocument und mein Projekt

B

b600forever

Hallo Leute,
da ich nun einige Zeit ohne Registrierung tutorials.de genossen habe, bin ich nun auch offizielles MItglied.
Ich möchte in diesem Thread ein bisschen was von meinem Projekt erzählen und einige Musterlösungen präsentieren, an denen sich schon viele, unter anderem auch ich, die Zähne ausgebissen haben.

Zu meinem Projekt:
Ich bastle seit zwei Jahren an einem Office Programm, mit dem man folgende Funktionen durchführen kann:
- Neues Projekt erstellen (mit Bezeichnung und Datum)
- Seite einfügen
Auf einer gerade angezeigten Seite:
- Texte einfügen
- Bilder einfügen
- Linien einfügen

Das Programm ist eher ein Layout- als ein Textprogramm, denn man kann jeden Text, Bild und Linie beliebig auf der Seite verschieben, dann Bilder und Text in 90° Schritten drehen und bei den Linien die Endpunkte einzeln verschieben.

Im Zuge der Darstellung der Seiten habe ich lange herumexperimentiert, um eine gute Darstellung für die Texte zu bekommen.
Angefangen bei eigenen Ideen über LineBreakMeasurer bis hin zur ultimativen Idee, Texte so zu zeichnen, wie es z.B. in einer JTextPane gemacht wird, d.h. mit verschiedenen Formatierungen für jedes Zeichen, Ausrichtungen der Paragraphen, Tabstopps usw.

Hier eine einfache, wie auch geniale Idee, solche mehrfach formatierten Strings OHNE großen Aufwand zu zeichnen:

//JTextPane, die wir darstellen wollen
JTextPane pane = new JTextPane();

//auf dieser könne wir mittels AttributSet mit den Methoden setCharacterAttributes und
//setParagraphAttributes beliebige Formatierungen durchführen
pane.setOpaque(false);
//wichig, damit nur der Text ohne Hintergrund gezeichnet wird

BufferedImage buffer = new BufferedImage(breite, höhe, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = buffer.createGraphics();

g2.setColor(Color.WHITE); // hintergrund von BufferedImage weiß machen
g2.fillRect(0,0 breite, höhe);

pane.paint(g2);

// und dann noch das Offscreen Image auf ein JPanel zeichnen
JPanel jPanel = new JPanel();
jPanel.getGraphics().drawImage(buffer, x, y, jPanel);

Mit dieser Methode kann man den Inhalt (nur Text, ohne Hintergrund) zeichnen, wohin man will, also auf ein JPanel oder auch mit nem Drucker müsste das funktionieren.

Die Drehungen und Verschieben ist dann nur noch eine Sache von AffineTransform

So, das wars erstmal für heute, bezüglich dieser Sache, werde ich noch weiter Ausführungen und ein paar Fragen stellen.

Viele Grüße und hoffe es hat jemanden geholfen.;-)
 
Hallo,

Hättest du vielleicht eine Idee wie ich nun den Inhalt (Text, Bilder) des JTextPanes erhalten könnte um das dann in den DB zu speichern?

MFG
hihi
 
Zurück