string spiegeln

Status
Nicht offen für weitere Antworten.
C

chelly

Gast
Hallo,

ich möchte wissen, ob es eine Möglichkeit gäbe, einen String zu spiegeln.

Ich kann die Spiegelung hier nicht darstellen, deswegen gebe ich noch ein Beispiel zur Vorstellung.
Stellt euch vor, ein Spiegel liegt auf dem Boden, wenn ich einen Namen auf meine Handfläche schreibe und den auf dem Spiegel lese.
Die Darstellung auf dem Spiegel möchte ich haben.

Ist das mit Java möglich??

Vielen Dank im voraus.
chelly
 

Bert Brenner

Bekanntes Mitglied
Ein String repräsentiert doch nur eine Zeichenkette, wie du die nachher darstellst ist deine Sache.

Wenn du selber zeichnest, dann kannst du den gewünschten Effekt bestimmt mit AffineTransform erzeugen.
 

thE_29

Top Contributor
Code:
package at.jta;

import javax.swing.JLabel;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.font.TextLayout;
import java.awt.image.BufferedImage;
import java.awt.geom.Rectangle2D;
import java.awt.Graphics2D;
import java.awt.Color;
import java.awt.geom.AffineTransform;

/**
 * 
 * 

Überschrift: Label zeigt den Text horizontal gespiegelt an</p> 
 * 
 * 

Beschreibung: </p> 
 * 
 * 

Copyright: Copyright (c) 2006</p> 
 * 
 * 

Organisation: Taschek Jörg</p>
 * 
 * @author Taschek Jörg
 * @version 1.0 Erstversion 6.11.2006
 */
public class MirrorLabel
    extends JLabel
{
  /**
   *
   * @param text String
   */
  public MirrorLabel(String text)
  {
    super(text);
  }

  /**
   *
   * @param g Graphics
   */
  public void paintComponent(Graphics g)
  {
    Graphics2D g2 = (Graphics2D) g;
    TextLayout layout = new TextLayout(this.getText(), this.getFont(), g2.getFontRenderContext());
    Rectangle2D bounds = layout.getBounds();

    double textImgWidth = bounds.getWidth() + 12;
    double textImgHeight = bounds.getHeight() + layout.getDescent() + 4;

    BufferedImage textImage = new BufferedImage( (int) textImgWidth, (int) textImgHeight, BufferedImage.TYPE_INT_ARGB);

    Graphics2D g2text = textImage.createGraphics();
    g2text.setColor(Color.WHITE);
    layout.draw(g2text, 6, layout.getAscent());
    g2text.dispose();

    int textWidth = textImage.getWidth();
    int textHeight = textImage.getHeight();

    //hier das TextImage erstellen (1 bit nach links ist * 2)
    BufferedImage buffer = new BufferedImage(textWidth, textHeight << 1, BufferedImage.TYPE_INT_ARGB);
    Graphics2D gg = buffer.createGraphics();
    //zuerst normal raufzeichnen
    gg.drawImage(textImage, null, null);
    //hier Position umsetzen, sodaß 0,0 eigentlich 0, textHeight ist
    gg.translate(0, textHeight << 1);
    //spiegel transform anlegen
    AffineTransform reflectTransform = AffineTransform.getScaleInstance(1.0, -1.0);
    //hier das gespiegelte Bild drauflegen
    gg.drawImage(textImage, reflectTransform, null);
    //hier Position wieder zurücksetzen
    gg.translate(0, - (textHeight << 1));
    gg.dispose();

    int x = 0, y = 0;
    if(this.getHorizontalAlignment() == CENTER)
      x = (getWidth() - textWidth) / 2;
    else if(this.getHorizontalAlignment() == RIGHT)
      x = getWidth() - textWidth;
    if(this.getVerticalAlignment() == BOTTOM)
      y = getHeight() - textHeight << 1;
    else if(this.getVerticalAlignment() == CENTER)
      y = (getHeight() - textHeight) / 2;

    //hier das normale Bild + Spiegelbild in einem auf die gewünschten Koordinaten zeichnen
    g.drawImage(buffer,x,y,null);
  }

  /**
   * 
   * @return Dimension
   */
  public Dimension getPreferredSize()
  {
    Dimension dim = super.getPreferredSize();
    dim.height *= 2; //doppelte Höhe zurückgeben
    return dim;
  }
}

Das isn gespiegeltes Label was ich schnell zusammengebaut habe!

Hoffe der Code ist verständlich ;)
 

kaie

Bekanntes Mitglied
Hier eine etwas kürzere Lösung, mit der man auch andere Komponenten spiegeln kann. Natürlich bleibt dabei die Interaktion auf der Strecke.

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class MirrorPanel extends JPanel
{
	public void paintComponent( Graphics g )
	{
		Graphics2D g2 = (Graphics2D)g;
		AffineTransform a = (AffineTransform)g2.getTransform().clone();
		a.translate(getSize().width,0);
		a.scale(-1,1);
		g2.setTransform(a);
		super.paintComponent(g);
	}
	public static void main( String[] s )
	{
		JFrame f = new JFrame();
		f.setLayout(new GridLayout(2,1));
		f.add(new JLabel("Spiegelschrift"));
		MirrorPanel m = new MirrorPanel();
		m.add(new JLabel("Spiegelschrift"));
		f.add(m);
		f.pack();
		f.setVisible(true);
	}
}
 

thE_29

Top Contributor
Kürzer ist nicht gleich besser ;)

Imho isses sowieso 1:1 das gleiche, das Problem is nur, das ich nur den Text Spiegeln wollte!

Ein ganzes Ding war ja das leichtere zum Spiegeln (oder gleich ein Bild).
 
G

Guest

Gast
hallo,

zu der lösung von kai.

Das ist keine Spiegelung sondern eine Drehung von 180 grad nur.
Ich meine mit spiegelung folgendes
 
G

Guest

Gast
sorry, ich habe vergessen den Satz zu ende zu bringen.

folgendes:


Jeder Buchstabe des angegebene String bleibt an der gleiche Stelle wo sie ist,
Die Buchstaben werden aber durch eine Y_Axe gespiegelt

spiegel.jpg
 
G

Guest

Gast
Hallo nochmal,

also die lösung von thE_29 war brillant, ein probleme noch.

wie kann ich den Code so umändern, dass ich nur der gespieglte String darstelle und auf der gesamte Fläche des Panels?

Vielen Dank im voraus.
chelly
 

kaie

Bekanntes Mitglied
Hey, Du hast nie gesagt, um welche Achse Du Deinen Text gespiegelt haben wolltest. Und ich bin immer noch überzeugt, dass meine Lösung eleganter ist (...schmoll...) :(

Ersetze einfach die beiden Zeilen:
Code:
      a.translate(getSize().width,0); 
      a.scale(-1,1);
mit
Code:
      a.translate(0,getSize().height); 
      a.scale(1,-1);
und schon ist der Text um die x-Achse gespiegelt. Übrigens funktioniert das auch wunderbar mit HTML-Text:
Code:
   public static void main( String[] s ) 
   { 
      JFrame f = new JFrame(); 
      f.setLayout(new GridLayout(2,1)); 
      f.add(new JLabel("<html><h1>Hallo!</h1>Dies ist ein [i]kursiver[/i] Text")); 
      MirrorPanel m = new MirrorPanel(); 
      m.setLayout(new BorderLayout());
      m.add(new JLabel("<html><h1>Hallo!</h1>Dies ist ein [i]kursiver[/i] Text")); 
      f.add(m); 
      f.pack(); 
      f.setVisible(true); 
   }
 

thE_29

Top Contributor
Jetzt schau dir mal deines an und dann schau dir mal meines an und sag mir welches Resultat besser aus sieht!

Da ist das klar meines, da meines auch wirklich untereinander gespiegelt wird und net irgendwo :D


Außerdem ist deines ganz einfach keine Spiegelung und aus!

Du drehst deine Komponente um 180 grad!

Du legst ja 2 drauf und nicht eines!

Bei mir ist das einfach 1 Komponente ;)
 

kaie

Bekanntes Mitglied
Moooooooment, der Origrinalposter wollte, soweit ich das verstanden habe, NUR den gespiegelten Text, und nicht den gleichen Text zweimal (einmal normal, einmal gespiegelt). Bei mir kann er beide einzeln erzeugen und anzeigen.

Hast Du meine Lösung eigentlich mal angesehen? Ich habe exakt die gleiche Verschiebung und Skalierung mit -1 wie Du in Deiner Lösung, nur zuerst um die falsche Achse (da die in der Frage gar nicht angegeben war).

Will ja hier jetzt auch keinen Forenkrieg auslösen, Deine Lösung ist ja auch schön! :)

(aber meine gefällt mir besser... :bae: )

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class MirrorPanel extends JPanel
{
	public void paintComponent( Graphics g )
	{
		Graphics2D g2 = (Graphics2D)g;
		AffineTransform a = (AffineTransform)g2.getTransform().clone();
		a.translate(0,getSize().height);
		a.scale(1,-1);
		g2.setTransform(a);
		super.paintComponent(g);
	}
	public static void main( String[] s )
	{
		JFrame f = new JFrame();
		f.setLayout(new GridLayout(2,1));
		f.add(new JLabel("<html>Dieser Text ist [i]<u>wirklich</u>[/i] gespiegelt!"));
		MirrorPanel m = new MirrorPanel();
		m.setLayout(new BorderLayout());
		m.add(new JLabel("<html>Dieser Text ist [i]<u>wirklich</u>[/i] gespiegelt!"));
		f.add(m);
		f.pack();
		f.setVisible(true);
	}
}

Schönen Tag noch!
 

thE_29

Top Contributor
Okay, deine letzte Version ist jetzt gut!

Aber die vorigen waren es nicht ;) Da der Text bei mir immer irgendwo gespiegelt war..

Und das er nur den gespiegelten will, habe ich erst vor 10min entdeckt :D
 

kaie

Bekanntes Mitglied
Wunderbar, dann sind ja alle glücklich und zufrieden. thE_29, ich freue mich schon auf weitere sportliche Diskussionen bei der nächsten AWT-Frage. Ich LIEBE dieses Forum!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
officialmaxl JavaFX Textfield getTextfield() in String speichern AWT, Swing, JavaFX & SWT 1
H String zu int/long AWT, Swing, JavaFX & SWT 8
D String als Textdatei in ausgewähltem Speicherplatz speichern AWT, Swing, JavaFX & SWT 32
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
J SWT Search string highlite AWT, Swing, JavaFX & SWT 5
M JavaFX String aus TextField reagiert nicht wie erwartet AWT, Swing, JavaFX & SWT 3
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
J Event Handling Input auf String testen, Fehlermeldung ausgeben AWT, Swing, JavaFX & SWT 4
D JavaFX ComboBox String setzen AWT, Swing, JavaFX & SWT 20
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
X Zeilen aus einer Textdatei einzelnd als String abrufen AWT, Swing, JavaFX & SWT 8
KilledByCheese Event Handling Vom ActionEvent auf String zugreifen - genaueres in der Beschreibung AWT, Swing, JavaFX & SWT 3
T replace string AWT, Swing, JavaFX & SWT 1
D String zu StringProperty Konvertieren AWT, Swing, JavaFX & SWT 4
T jTextField mit String befüllen AWT, Swing, JavaFX & SWT 1
E Eigenes TableModel für ArrayList<String[]> AWT, Swing, JavaFX & SWT 5
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
P DefaultStyledDocument eingegebenen String durchsuchen und bestimmte Sachen einfärben AWT, Swing, JavaFX & SWT 1
B 2D-Grafik String drehen/platzieren/formatieren in bestimmten Bereich AWT, Swing, JavaFX & SWT 1
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
S XML Output String Format AWT, Swing, JavaFX & SWT 2
R Swing JTextField getText() liefert leeren String AWT, Swing, JavaFX & SWT 6
P Swing String mit unterschiedlichen Formaten zusammenbauen AWT, Swing, JavaFX & SWT 14
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
J 2D-Grafik String aus array wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
L Swing JToogleButton Vordergrundfarbe bei HTML String AWT, Swing, JavaFX & SWT 4
T Swing JProgressBar mit String unschön AWT, Swing, JavaFX & SWT 5
M Swing String zerlegen AWT, Swing, JavaFX & SWT 2
J Swing String soll als Variable dienen AWT, Swing, JavaFX & SWT 11
A Text (String) zu einer Box hinzufügen AWT, Swing, JavaFX & SWT 16
D textfeld string zu float AWT, Swing, JavaFX & SWT 5
B Color String Code AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
S String is null Fehler AWT, Swing, JavaFX & SWT 2
M SomeClass.class.getResourceAsStream(String filename) funktioniert nicht in jar) AWT, Swing, JavaFX & SWT 32
B JTable Component mit String? AWT, Swing, JavaFX & SWT 4
S String Array Ausgabe im JLabel ??? AWT, Swing, JavaFX & SWT 8
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
L SWT Text SelectionText ersetzen durch anderen String AWT, Swing, JavaFX & SWT 6
B Color.BLUE in String umwandeln AWT, Swing, JavaFX & SWT 4
H String auf Knopfdruck in JPanel zeichnen. AWT, Swing, JavaFX & SWT 6
P 2D-Grafik String übergeben, PNG soll rauskommen AWT, Swing, JavaFX & SWT 9
A Formatierten String ausgeben (drawString) AWT, Swing, JavaFX & SWT 5
S Swing Grundprinzip String ausgeben, aber wie? AWT, Swing, JavaFX & SWT 6
R JComboBox Ausgabe in String speichern AWT, Swing, JavaFX & SWT 3
TiME-SPLiNTER Swing JListModel: String rendern AWT, Swing, JavaFX & SWT 2
R String in JFrame ausgeben AWT, Swing, JavaFX & SWT 10
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
C Swing Text eines JButton mit String definieren? Reihenfolge? AWT, Swing, JavaFX & SWT 6
S [Button] setText("String") AWT, Swing, JavaFX & SWT 5
1 BufferedImage in byte[], dann in String und zurück AWT, Swing, JavaFX & SWT 7
I String lowercase, uppercase und umdrehen AWT, Swing, JavaFX & SWT 3
D Swing JTextField String anhängen AWT, Swing, JavaFX & SWT 7
F Swing String Array mit JTextArea anzeigen AWT, Swing, JavaFX & SWT 13
P Canvas: String wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
T SWT String mitten ins Textfeld einfügen + richtige Cursorposition AWT, Swing, JavaFX & SWT 3
T Swing Wie kann ich einen String in ein TreePath umwandeln? AWT, Swing, JavaFX & SWT 5
H String ausführen und damit weiterarbeiten AWT, Swing, JavaFX & SWT 4
radiac AWT Mausposition als String ausgeben??? AWT, Swing, JavaFX & SWT 5
U Swing Eingabe von JTextField in einen String übergeben. AWT, Swing, JavaFX & SWT 3
N SWT Ende vom String in Text anzeigen AWT, Swing, JavaFX & SWT 5
B ActionEvent Dateipfad als String übergeben AWT, Swing, JavaFX & SWT 11
bugmenot JTextPane String stimmt nicht mit übergebenem String überein AWT, Swing, JavaFX & SWT 9
G JTextArea: String formatieren AWT, Swing, JavaFX & SWT 2
G Ein Wort in einem String färben in einer Canvas AWT, Swing, JavaFX & SWT 10
S List<String> in JTextArea! AWT, Swing, JavaFX & SWT 4
F kleines problem beim suchen in einem String AWT, Swing, JavaFX & SWT 15
G in JTextField wie in der Console Ein String ein lesen AWT, Swing, JavaFX & SWT 8
G Date in einen String umwandeln AWT, Swing, JavaFX & SWT 4
S schauen ob ein string leer ist AWT, Swing, JavaFX & SWT 4
B JTextPane und Image importieren in HTML String. AWT, Swing, JavaFX & SWT 2
S Suchen im String-Array AWT, Swing, JavaFX & SWT 3
mabe83 Swing: jTableCellRenderer -> Klappt nur bei String-Spalte AWT, Swing, JavaFX & SWT 2
O String aus Klasse X in Klasse Y befördern AWT, Swing, JavaFX & SWT 12
M leerzeichen aus string entfernen AWT, Swing, JavaFX & SWT 3
S String an eine andere Klasse im anderem package übergeben AWT, Swing, JavaFX & SWT 3
B NullPointerException bei String vergleich AWT, Swing, JavaFX & SWT 5
T String in String [] umwandeln?? AWT, Swing, JavaFX & SWT 4
S Checkbox oder String in JTable-Spalte AWT, Swing, JavaFX & SWT 4
E Frage zum String AWT, Swing, JavaFX & SWT 6
M BufferedImage mit html interpretierten String beschriften AWT, Swing, JavaFX & SWT 3
K Choice auswahl und String in Int AWT, Swing, JavaFX & SWT 8
Y entfernten String einer JTextPane per DocumentListener AWT, Swing, JavaFX & SWT 5
C string wird mehr fach gezeichnet AWT, Swing, JavaFX & SWT 3
S String aus JTextField AWT, Swing, JavaFX & SWT 11
B JTable String übergeben AWT, Swing, JavaFX & SWT 3
M jEditorPane String to html AWT, Swing, JavaFX & SWT 2
A String aus einem JTextField an ein JLabel übergeben AWT, Swing, JavaFX & SWT 10
S double in String umwandeln AWT, Swing, JavaFX & SWT 6
R Double in der Tabelle statt String und Integer AWT, Swing, JavaFX & SWT 3
G ActionListener zu String hinzufügen AWT, Swing, JavaFX & SWT 2
I JProgressBar String anzeigen, danach wieder normale Ansicht AWT, Swing, JavaFX & SWT 3
G Quadratmeter im String darstellen AWT, Swing, JavaFX & SWT 2
F String aus JTextField AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben