Comment mettre JTextArea d'avoir la hauteur qui correspond à la taille d'un texte qu'il contient (à scrollbars éviter)

StackOverflow https://stackoverflow.com/questions/3081210

Question

Ce problème semble trivial, mais je ne peux pas trouver la solution.

Quand je crée une forme contient une JTextArea. Je veux mettre un grand texte constant en elle. Si le texte est dit 1000 lignes, je veux que mon JTextArea soit 1000 lignes haute (pour être suffisamment grand pour afficher le texte entier sans barres de défilement). JTextArea est à l'intérieur d'un panneau qui peut avoir une scrollbar il est donc pas un problème quand il est 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 puis-je y parvenir? Merci.

Était-ce utile?

La solution

Le BorderLayout se chargera de la barre de défilement de la boîte si vous mettez simplement votre JTextAreain un JScrollPane avant de l'ajouter à votre JPanel. FlowLayout, d'autre part, ne fonctionne pas. Il ne sera pas afficher la barre de défilement à moins, comme Intimates @Xorty, vous appelez setPreferedSize() sur votre JScrollPane et lui donner la dimension que vous voulez.

Autres conseils

Vous pouvez aussi 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. Lorsqu'un texte est entré, appel à getPreferredSize () de JTextArea- il vous donnera la taille nécessaire pour afficher tout le texte. Après que l'utilisation setPrefferedSize () de JScrollPane pour définir la taille de JTextArea

Eh bien, tout d'abord: il est JTextArea pas JTextArea

.

- mettre en JTextArea JScrollPane. Lorsqu'un texte est entré, appel à getPreferedSize() de JScrollPane - ça va vous donner la taille précise nécessaire pour afficher le texte entier. En outre, je n'utiliser d'autres LayoutManager que « Free Design » de NetBeans swing constructeur - donc je ne suis pas sûr de savoir comment se comportera d'autres LayoutManagers il

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top