web-dev-qa-db-fra.com

barres de défilement dans JTextArea

Comment ajouter des barres de défilement à un JTextArea?

45
Raji

Comme Fredrik le mentionne dans sa réponse , le moyen le plus simple d'y parvenir est de placer le JTextArea dans un JScrollPane . Cela permettra le défilement de la zone d'affichage du JTextArea.

Par souci d'exhaustivité, voici comment cela pourrait être réalisé:

JTextArea ta = new JTextArea();
JScrollPane sp = new JScrollPane(ta);   // JTextArea is placed in a JScrollPane.

Une fois que le JTextArea est inclus dans le JScrollPane, le JScrollPane doit être ajouté à l'emplacement de la zone de texte. Dans l'exemple suivant, la zone de texte avec les barres de défilement est ajoutée à un JFrame:

JFrame f = new JFrame();
f.getContentPane().add(sp);

Merci kd304 d'avoir mentionné dans les commentaires que l'on devrait ajouter le JScrollPane au conteneur plutôt que le JTextArea - Je pense que c'est une erreur courante d'ajouter la zone de texte elle-même vers le conteneur de destination plutôt que le volet de défilement avec la zone de texte.

Les articles suivants de The Java Tutorials a plus de détails:

72
coobird

Mettez-le dans un JScrollPane

Edit: Voici un lien pour vous: http://Java.Sun.com/docs/books/tutorial/uiswing/components/textarea.html

18
Fredrik

Vous devez d'abord définir un JTextArea comme d'habitude:

public final JTextArea mainConsole = new JTextArea("");

Ensuite, vous mettez un JScrollPane sur le TextArea

JScrollPane scrollPane = new JScrollPane(mainConsole);
scrollPane.setBounds(10,60,780,500);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

La dernière ligne indique que la barre de défilement verticale sera toujours là. Il existe une commande similaire pour l'horizontale. Sinon, la barre de défilement n'apparaîtra qu'en cas de besoin (ou jamais, si vous utilisez _SCROLLBAR_NEVER). Je suppose que c'est à vous de décider dans quel sens vous voulez l'utiliser.

Vous pouvez également ajouter un retour à la ligne à JTextArea si vous voulez: Guide Here

Bonne chance,
Norme M

P.S. Assurez-vous d'ajouter le ScrollPane au JPanel et de ne pas ajouter le JTextArea.

15
Norm MacLennan
            txtarea = new JTextArea(); 
    txtarea.setRows(25);
    txtarea.setColumns(25);
    txtarea.setWrapStyleWord(true);
    JScrollPane scroll = new JScrollPane (txtarea);
    panel2.add(scroll); //Object of Jpanel

Les lignes ci-dessus vous montrent automatiquement les barres de défilement horizontales et verticales.

5

Je voulais juste dire merci au premier post le plus haut d'un utilisateur que je pense nommé "coobird". Je suis nouveau sur ce site Web stackoverflow.com, mais je ne peux pas croire à quel point cette communauté est utile et utile ... donc merci à vous tous d'avoir publié de bons conseils et de conseiller les autres. C'est ce qu'est une communauté.

Coobird a maintenant correctement dit:

Comme Fredrik le mentionne dans sa réponse, le moyen le plus simple d'y parvenir est de placer le JTextArea dans un JScrollPane. Cela permettra le défilement de la zone d'affichage de JTextArea.

J'aimerais dire:

La déclaration ci-dessus est absolument vraie. En fait, j'avais eu du mal avec cela dans Eclipse en utilisant le plugin WindowBuilder Pro parce que je ne pouvais pas comprendre quelle combinaison de widgets m'aiderait à atteindre cet objectif. Cependant, grâce au post de coobird, j'ai pu résoudre cette frustration qui m'a pris des jours.

Je voudrais également ajouter que je suis relativement nouveau pour Java même si j'ai une base solide dans les principes. Les extraits de code et les conseils que vous donnez ici sont extrêmement utiles.

Je veux juste ajouter un autre petit morceau qui pourrait aider les autres. J'ai remarqué que Coobird a mis du code comme suit (afin de montrer comment créer une zone de texte défilable). Il a écrit:

JTextArea ta = new JTextArea();
JScrollPane sp = new JScrollPane(ta);   

Je voudrais dire merci à l'extrait de code ci-dessus de coobird. Je ne l'ai pas essayé directement comme ça mais je suis sûr que cela fonctionnerait très bien. Cependant, il peut être utile pour certains de vous faire savoir que lorsque j'ai fait cela à l'aide de l'outil WindowBuilder Pro, j'ai obtenu quelque chose de plus semblable au suivant (qui, je pense, est juste un moyen un peu plus long et "indirect" pour que WindowBuilder atteigne ce que vous voir dans les deux lignes ci-dessus. Mon code se lit un peu comme ceci:

JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(23, 40, 394, 191);
frame.getContentPane().add(scrollPane);

JTextArea textArea_1 = new JTextArea();
scrollPane.setViewportView(textArea_1);`

Notez que WindowBuilder crée essentiellement un JScrollPane appelé scrollpane (dans les trois premières lignes de code) ... puis il définit la viewportview par la ligne suivante: scrollPane.setViewportView (textArea_1). Donc, en substance, cette ligne ajoute le textArea_1 dans mon code (qui est évidemment un JTextArea) à ajouter à mon JScrollPane **, ce qui est précisément ce dont Coobird parlait).

J'espère que cela est utile car je ne voulais pas que les développeurs de WindowBuilder Pro soient confus en pensant que le conseil de Coobird n'était pas correct ou quelque chose.

Meilleurs voeux à tous et bon codage :)

2
user2538501

moyen simple d'ajouter JTextArea dans JScrollBar avec JScrollPan

import javax.swing.*;
public class ScrollingTextArea 
{
     JFrame f;
     JTextArea ta;
     JScrollPane scrolltxt;

     public ScrollingTextArea() 
     {
        // TODO Auto-generated constructor stub

        f=new JFrame();
        f.setLayout(null);
        f.setVisible(true);
        f.setSize(500,500);
        ta=new JTextArea();
        ta.setBounds(5,5,100,200);

        scrolltxt=new JScrollPane(ta);
        scrolltxt.setBounds(3,3,400,400);

         f.add(scrolltxt);

     }

     public static void main(String[] args) 
     {
        new ScrollingTextArea();
     }
}
1