Écrire du html avec Graphics2d

Fermé
Oliv - 4 nov. 2020 à 14:24
 Oliv - 5 nov. 2020 à 09:52
Bonjour,

Tout est dans le titre... Y a moyen ?
C'est parce que j'ai besoin d'un glyphe disponible uniquement en html, css, js et consorts. Mon JLabel fait l'affaire, mais... J'ai besoin aussi de le faire "pivoter" à 90°. Et là, il faut que mon
JLabel
redéfinissent
paintComponent
et c'est donc
Graphics2D
qui rend le texte. Seulement il ne le rend pas EN html.
J'ai cherchu, j'ai rien vu, j'ai perdu.
À l'aide ? Merci...

<html>🗜</html>


Configuration: Windows / Chrome 86.0.4240.183
A voir également:

1 réponse

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
4 nov. 2020 à 18:22
Bonjour,

Tu peux regarder la documentation :
How to Use HTML in Swing Components

Remarque : depuis Java 8 c'est JavaFX qui est préconisé pour les clients lourds. AWT et Swing ne sont plus maintenus.
1
Je sais comment utiliser html dans les composants (qui le supportent). Le :
<html>🗜</html>

aurait pu te mettre la puce à l'oreille puisque les balises (html) ne sont pas nécessaires ici, seulement dans les composants en question.
Je sais aussi faire pivoter le
Graphics
d'un composant.
Ce que je ne sais pas, c'est comment écrire en html AVEC LE GRAPHICS d'un composant, pour pouvoir faire pivoter mon texte html.
Comment obtenir ce que j'aurais aimé pouvoir obtenir simplement avec ça :
graphics_2d.drawString("<html>&#x 1F5DC</html>", 2, getHeight() - 2);
graphics_2d.rotate(Math.PI / 2.d, getWidth() / 2, getHeight() / 2);


j'ai mis l'espace dans le
String
uniquement ici pour montrer le code html.

Pour JavaFX, non, on a déjà eu cette discussion... Mais merci quand même.
0
Ok, j"ai un moyen.

J'en avais besoin pour un
JButton
mais évidemment ça s"applique aussi à un
JPanel
ou même (!?) à un
JLabel
qui contiendrait celui qui nous interresse, et qui ne pourraient pas pivoter eux-même en raison de leurs dimensions, comme mon
JButton
.

private class Display extends JButton {
    private boolean rotate;
    private CellRendererPane renderer;
    private JLabel label;
    private Display(boolean rotate_) {
        rotate = rotate_;
        renderer = new CellRendererPane();
        label = new JLabel("<html>🗜</html>");// &#x 1F5DC
        label.setFont(label.getFont().deriveFont(16.f));
        label.setHorizontalAlignment(JLabel.CENTER);
        label.setVerticalAlignment(JLabel.TOP);
        add(renderer);
    }
    @Override
    protected void paintComponent(Graphics graphics_) {
        super.paintComponent(graphics_);
        Graphics2D g_2d = (Graphics2D)graphics_.create();
        try {
            if(rotate == true) {
                g_2d.rotate(Math.PI / 2.d, getWidth() / 2, (getHeight() / 2) + 1);
            }
	        renderer.paintComponent(g_2d, label, this, 0, 0, getWidth(), getHeight());
        } finally {
            g_2d.dispose();
        }
    }
}
0
C'est bon, j'ai une solution (ajoutée ici). Merci à toi. Merci toujours.
0