Ein Wort in einem String färben in einer Canvas

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hallo,

ich möchte in einer canvas ebene einen string ausgeben:
String: "Der Name der Rose"

das wort "Name" soll rot sein, der rest schwarz.
ich habe schon die threads gelesen und strings mit html-tags versehen, funktioniert auch gut, aber nur dein JTextfields oder Textareas, die kennen das.
In der canvas mit g.drawString.... werden die tags mit ausgegeben -> mist.

ich kann zwar vor jedem wort die textfarbe ändern und die einzelnen worte mit g.drawString platzieren, müsste hierzu aber wissen wie lang ein wort ist, um das nächste daneben zu setzen, das kann es doch auch nicht sein.

ich weiß grad nicht weiter, danke schonmal für eure hilfen
mfg
dalco
 
Zeichne doch einfach drei Strings. "Der", "Name", "der Rose". Den Mittleren zeichnest Du rot, die anderen beiden schwarz.

Viel Spaß!
 
Da das Zeichnen von Strings dir verständlicherweise zu aufwendig ist, versuch's mal mit JLabel und html.
Code:
jLabel1.setText("<html>Der <font color=red>Name <font color=black>der Rose");

EDIT: oder nimm einfach drei JLabels mit der jeweils passenden Foreground Farbe,
die du nebeneinander in dein Panel setzt.
 
ich kann zwar vor jedem wort die textfarbe ändern und die einzelnen worte mit g.drawString platzieren, müsste hierzu aber wissen wie lang ein wort ist, um das nächste daneben zu setzen, das kann es doch auch nicht sein.

Wenn du die Worte undbeingt mit g.drawString zeichnen musst, wirst du um das Berechnen der Größe eines Wortes (für die richtige Platzierung des nächsten) nicht drumrumkommen. Die Klasse FontMetrics wäre ein Suchstichwort dazu...
 
Jlabel geht mit html-strings, weiß ich selbst.
und ja, es muss in einer canvas mit g.drawstring gezeichnet werden, die ich grafiken platziere und alles drum rum so aufgebaut ist,
werd mir deine klasse mal anschauen
danke einstweilen
 
Anonymous hat gesagt.:
es muss in einer canvas mit g.drawstring gezeichnet werden, die ich grafiken platziere und alles drum rum so aufgebaut ist
Das kann man mit Canvas machen, muss man aber nicht.
Hier ist eine Möglichkeit mit Panel und JLabel.
Code:
class MyPanel extends Panel {
    public MyPanel() {
        setLayout(null);
        JLabel label = new JLabel();
        label.setText("<html>Der <font color=red>Name <font color=black>der Rose");
        label.setBounds(100, 100, 200, 20);
        add(label);
    }
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawOval(80, 60, 150, 100);
    }
}
 
Ich find's im allgemeinen nicht schön, AWT-Komponenten und Swing-Komponenten in GUIs zu vermischen. Kannst Du nicht gleich Swing nehmen?
 
Ein Ansatz wäre vielleicht auch, ein JLabel nur als "renderer" zu verwenden, aber das könnte auch ein bißchen fummelig/hakelig werden.
 
Marco13 hat gesagt.:
Ein Ansatz wäre vielleicht auch, ein JLabel nur als "renderer" zu verwenden
Du meinst vielleicht sowas:
Code:
class MyPanel extends Panel {
    private JLabel label;
    private Rectangle rectLabel = new Rectangle(100, 100, 200, 20);
    public MyPanel() {
        label = new JLabel();
        label.setText("<html>Der <font color=red>Name <font color=black>der Rose");

    }
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        SwingUtilities.paintComponent(g, label, (Container) MyPanel.this, rectLabel);
        g.drawOval(80, 60, 150, 100);
    }
}
Das geht allerdings auch.
 
hallo,
danke an alle, habs nun mit FontMetrics gelöst, ist echt klasse klasse 🙂
ich iteriere über den string, weiß dann genau die länge der einzelnen wortes, ändere dann die farbe und setze mit dem g.drawString das nächste wort an das ende der vorherigen+5 pixel, and so on.

geht und sieht gut aus,
danke und frage hiermit beendet
mfg
dalco
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben