# Programmation Java Swing/Contenu en HTML

* Introduction
* Composants
** Arbre
* Fenêtres
* Menus
* Actions
* Types de données et constantes
* Gestion de la disposition des composants
* Gestion des évènements
* Gestion des actions asynchrones
* Apparence de l'interface
* Contenu en HTML
* Créer un composant
** Une case à cocher à trois états
** Dessin d'un composant
** Dessin d'une étoile
** Dessin de texte et effets
* Créer une image
* Introduction
* Composants
** Arbre
* Fenêtres
* Menus
* Actions
* Types de données et constantes
* Gestion de la disposition des composants
* Gestion des évènements
* Gestion des actions asynchrones
* Apparence de l'interface
* Contenu en HTML
* Créer un composant
** Une case à cocher à trois états
** Dessin d'un composant
** Dessin d'une étoile
** Dessin de texte et effets
* Créer une image
[ Modifier le sommaire ]
La plupart des composants Swing supporte le texte en HTML. Cela permet d'ajouter facilement du texte formaté pour améliorer la présentation de l'interface graphique.

## Affichage en HTML
### JLabel, JButton

    Pour un rendu HTML, le texte doit être encadré par <html> et </html>.
    Exemple :
    JLabel l_title = new JLabel("<html>Le titre avec <b>une partie en gras</b>,"+ " et <span style=\"color:blue;\">une autre partie en bleu</span>.</html>");

### JTextPane

    En plus d'encadrer le texte par <html> et </html>, il faut spécifier le type de contenu, car ce composant supporte plusieurs types de document.
    Exemple :
    JTextPane tp_exemple = new JTextPane; tp_exemple.setContentType("text/html"); tp_exemple.setText("<html><head><style>p { margin: 20px 0; }</style></head>"+ "<body><h1>Titre</h1><p>Le texte avec <b>une partie en gras</b>,"+ " et <span style=\"color:blue;\">une autre partie en bleu</span>.</p></body></html>");
    Ce composant mémorise la feuille de style définie par l'entête (head) du source HTML.
    Il faut forcer le changement de type pour la supprimer comme montré ci-dessous :
    // Force la suppression de la feuille de style mémorisée : tp_exemple.setContentType("text/plain"); // Utiliser les propriétés du composant comme style par défaut (couleurs, police de caractères) : tp_exemple.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true); tp_exemple.setContentType("text/html"); tp_exemple.setText("<html><h1>Autre titre</h1><p>Autre texte.</p></html>");

## Limitations

Swing supporte HTML 4 et CSS 1.0 de manière limitée.

### Limitations HTML

Éléments HTML supportés par Swing :
| Élément(s) | Supporté(s) |
| <p> <span> <div> | Oui |
| <b> <i> <u> <sup> <sub> | Oui |
| <strong> <em> | Oui |
| <br> <hr> | Oui |
| <ins> <del> | Oui, mais rendu spécifique |
| <pre> | Non |
Attributs supportés par Swing :
| Attribut(s) | Supporté(s) |
| href src | Oui |
| class style | Oui |

### Limitations CSS

Attributs supportés :
| Attribut(s) | Supporté(s) |
| color background | Oui |
| font font-family | Oui |
| border border-spacing | Oui |
| border-top border-bottom border-left border-right border-collapse | Non |
| margin padding | Oui |
| margin-top margin-bottom margin-left margin-right | Non |
| padding-top padding-bottom padding-left padding-right | Non |

## Tester l'affichage en HTML

L'application dont le code source est ci-dessous permet de tester l'affichage en HTML avec un composant JTextPane.

### Code source
## Images

Le contenu HTML peut faire référence à des images. Par défaut, les chemins relatifs ne sont pas supportés, seul un chemin absolu permet l'affichage de l'image. Les URLs distantes sont également supportées pour les protocoles supportés par Java (HTTP, HTTPS).
Les chemins et URL relatifs sont supportés quand une URL de base est fournie à la méthode setPage(url) (url de type java.lang.String ou java.net.URL) qui charge la page correspondante. Cette méthode permet le chargement de pages HTML simples (HTML 4 et CSS 1), sans Javascript. Elle ne peut donc pas servir à afficher un site web.