Ce problème semble trivial, mais je ne trouve pas la solution. Lorsque je crée un formulaire, il contient un JTextArea
. Je veux y mettre un grand texte constant. Si le texte a une longueur de 1000 lignes, je veux que mes JTextArea
aient une hauteur de 1000 lignes (assez grande pour afficher tout le texte sans barres de défilement). JTextArea
est à l'intérieur d'un panneau qui peut avoir une barre de défilement donc ce n'est pas un problème quand il devient trop grand (il y a deux JTextArea
dans ce panneau .. quelque chose comme dans un outil de diff). Est-ce que quelqu'un sait comment je peux y arriver? Merci.Comment définir jTextArea pour avoir une hauteur correspondant à la taille d'un texte qu'il contient (pour éviter les barres de défilement)
Répondre
Le BorderLayout
se chargera de la barre de défilement de la boîte si vous mettez simplement votre JTextArea
dans un JScrollPane
avant de l'ajouter à votre JPanel
. FlowLayout
, d'autre part, ne fait pas. Il n'affiche pas la barre de défilement à moins que, comme @Xorty suggère, vous appelez setPreferedSize()
sur votre JScrollPane
et lui donner la dimension que vous souhaitez.
Passer à FlowLayout a résolu mon problème. Merci. – celicni
Eh bien, tout d'abord: c'est JTextArea pas jTextArea.
Maintenant, placez JTextArea dans JScrollPane. Lorsqu'un texte est entré, appelez getPreferedSize()
de JScrollPane - il vous donnera la taille précise nécessaire pour afficher le texte entier. De plus, je n'utilise jamais d'autre LayoutManager que 'Free Design' du constructeur NetBeans Swing - donc je ne suis pas sûr de la manière dont les autres LayoutManagers se comporteront.
Merci. Mais en premier lieu, ne dépendant pas de la hauteur JTextArea/JScrollPane, jScrollPane1.getPreferredSize(). GetHeight() renvoie 91.0. Qu'est-ce que ça veut dire? Et deuxième chose, que ferais-je avec jScrollPane1.getPreferredSize()? si je le passe dans jTextArea(). setSize() ou jTextArea.setMinimumSize, il n'y a pas d'effet. Si je le passe dans jTextArea.setPreferredSize(), l'effet est que le scollbar a disparu, mais JTextArea n'a pas été développé pour s'adapter au texte (donc je ne peux pas accéder au texte entier). – celicni
Vous pouvez également utiliser quelque chose comme ceci (largeur limitée, la hauteur en fonction du texte, utile lors de l'affichage des messages d'information):
public JTextArea createTextAreaFitToText(String message, Dimension minimalSize){
JTextArea aMessagePanel = new JTextArea();
aMessagePanel.setText(message);
/*for modelToView to work, the text area has to be sized. It doesn't matter if it's visible or not.*/
aMessagePanel.setPreferredSize(minimalSize);
aMessagePanel.setSize(minimalSize);
Rectangle r = aMessagePanel.modelToView(aMessagePanel.getDocument().getLength());
Dimension d = new Dimension(minimalSize.width, r.y + r.height);
aMessagePanel.setPreferredSize(d);
return aMessagePanel;
}
Pour augmenter ou diminuer la hauteur de JTextArea. Quand un texte est entré, appelez getPreferredSize() de JTextArea - il vous donnera la taille nécessaire pour afficher le texte entier. Après avoir utilisé setPrefferedSize() de JScrollPane pour définir la taille de JTextArea
Eh bien, j'ai essayé de trouver une option dans NetBeans pour le définir pour se développer automatiquement, et j'ai essayé de trouver une méthode pour régler ce comportement, mais sans succès (les méthodes setSize ne changent pas la taille ..) – celicni