Habillage de texte HTML dans un JEditorPane à l'intérieur d'un JScrollPane
Dans une application, je suis en utilisant non modifiable JEditorPanes comme une sorte d'INTERFACE utilisateur générique widget qui peut afficher un peu de contenu complexe (HTML fera l'affaire), d'envelopper les lignes de texte et attraper les clics de la souris. Vous ne savez pas si JEditorPane est un bon choix, alors n'hésitez pas à suggérer d'autres solutions.
L'exemple de code suivant fonctionne assez bien:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
public class Main {
private static JPanel createPanel() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
for (int i = 0; i < 3; i++) {
JEditorPane editorPane = new JEditorPane();
editorPane.setEditable(false);
editorPane.setContentType("text/html");
String text =
"This is <b>item #" + i + "</b>." +
" It's got text on it that should be wrapped."
;
editorPane.setText(text);
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = i;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weightx = 1.0;
constraints.insets.bottom = 5;
panel.add(editorPane, constraints);
}
return panel;
}
public static void main(String[] args) {
JPanel panel = createPanel();
JFrame frame = new JFrame();
frame.setSize(200, 200);
frame.setLocation(200, 200);
//Change this to switch between examples
boolean useScrollPane = false;
if (useScrollPane) {
JScrollPane scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setViewportView(panel);
frame.add(scrollPane);
}
else {
frame.add(panel);
}
frame.setVisible(true);
}
}
et le produit est le suivant:
Cependant, j'ai peut-être un grand nombre de ces et pourrait utiliser une barre de défilement verticale.
Alors, j'ai mis le tout dans un JScrollPane (modifier la useScrollPane
variable true
dans l'exemple de code pour voir cette version).
Cela me donne une barre de défilement verticale si je recule la hauteur de la fenêtre, mais le problème est que maintenant, le texte n'est plus enveloppé:
La question est donc: comment puis-je obtenir à la fois l'habillage du texte et la barre de défilement verticale?
Comme vous pouvez le voir, j'ai désactivé la barre de défilement horizontale, mais il n'a pas beaucoup d'aide.
PS. Je n'ai pas beaucoup d'expérience avec Swing, donc si vous voyez un débutant WTFs dans ce code, veuillez le signaler 🙂
OriginalL'auteur mjomble | 2011-03-02
Vous devez vous connecter pour publier un commentaire.
Voir Panneau À Défilement pour la classe et une explication sur la façon dont la classe fonctionne.
OriginalL'auteur camickr
Les barres de défilement d'un JScrollPane apparaissent que si la taille de la fenêtre d'affichage devenir plus petite que la taille préférée de sa vue component. Définir la taille par défaut du panneau dans le volet de défilement, ou de définir la taille par défaut de chaque éditeur de volets : la taille du groupe sera la composition de préférence des tailles de l'éditeur de fenêtres (somme de la hauteur préférée, et max de la pratique de largeur)
OriginalL'auteur JB Nizet