IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

ScrollPane + JTextArea s'adapte à la fenètre


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Octobre 2013
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 24
    Par défaut ScrollPane + JTextArea s'adapte à la fenètre
    Bonjour
    J'ai un JTextArea dans une JFrame, et j voudrais que le JTextArea s'adapte à la taille de la JFrame de cette manière :
    Quand on agrandit la JFrame, le JText s'agrandit d'autant
    Quand on rapetisse la JFrame, le JText reste comme il était précédemment avec un éventuel ScrollPane qui apparait si besoin. (ou au pire qui est tout le temps present par défaut)

    J'ai ça pour l'instant mais ca ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    JFrame.setDefaultLookAndFeelDecorated(true);
    frame.setBounds(0,0,800,600);
     
    JTextArea textArea = new JTextArea( );
    JScrollPane scrollPane = new JScrollPane(textArea);
    textArea.setSize(frame.getWidth(),frame.getHeight());
    scrollPane.setVisible(true);
    scrollPane.setWheelScrollingEnabled(true);
    scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    frame.getContentPane().add(textArea);
    Si quelqu'un à une idée
    merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,


    le positionnement et le dimensionnement de composant Swing s'effectue par LayoutManager.

    Tu verras que l'instance de classe utilisé comme content pane pour la frame a une méthode setLayoutManager(LayoutManager manager)

    Il suffit de lui passer donc une instance de LayoutManager.


    Regarder dans la FAQ pour plus de détail
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Par contre, au sujet du code que tu as fait, je note :

    - lorsqu'on utilise un JScrollPane pour scroller sur un composant, c'est le scrollPane qu'on met dans le conteneur parent (ici le contentPane de ta frame), pas le composant scrollé, sinon il est sorti du JScrollPane pour être mis dans l'autre composant au moment du add(...)
    - pour utiliser un JScrollPane, il y a un minimum d'informations à indiquer pour qu'il sache comment faire défiler le composant qu'il contient
    Regarde ce lien pour plus de détail.

    A noter qu'un JPanel ou un JTextArea (tout ce qui implémente Scrollable) est plus moins déjà préparé à être contenu dans un JScrollPane est sera donc plus facile à gérer.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre actif
    Inscrit en
    Octobre 2013
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 24
    Par défaut
    Merci pou ta réponse rapide.

    Je fonctionnais avec WindowBuilder car il me semblait que ca allait être plus rapide, mais en fait c'est assez difficile à utiliser je trouve. Du coup j'avais un AbsoluteLayout sur ma frame, mais c'est pas très adapté à ce que je veux faire.

    Finalement, je me sers d'un BorderLayout, et maintenant mon texte s'adapte à la taille de la fenètre, mais pas moyen de scroller :

    Note : this est une JFrame avec un BorderLayout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
                    JPanel centerPanel = new JPanel();
    		centerPanel.setLayout(new BorderLayout());
    		this.add(centerPanel, BorderLayout.CENTER);
     
    		// Text to print
    		JTextArea textArea = new JTextArea("BLABLABLABLA");
    		textArea.setEditable(false);
     
    		//ScroolPane
    		JScrollPane scrollPane = new JScrollPane(textArea);
    		scrollPane.setVisible(true);
    		scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    		scrollPane.setViewportView(textArea);
    		scrollPane.setWheelScrollingEnabled(true);
     
    		centerPanel.add(scrollPane, BorderLayout.EAST);
    		centerPanel.add(textArea, BorderLayout.CENTER);

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    La JTextArea se trouvant dans le JScrollPane, absolument pas besoin de l'ajouter en plus dans ta JFrame. C'est même la source de ton problème. Car un composant instancié ne peut se trouve qu'à un et un seul endroit dans ton interface graphique.

    de même, les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JScrollPane scrollPane = new JScrollPane(textArea);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scrollPane.setViewportView(textArea);
    Sont redondantes. pas besoin du setViewPortView qui est déjà appelé dans le constructeur.

  6. #6
    Membre actif
    Inscrit en
    Octobre 2013
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 24
    Par défaut
    d'accord :
    Citation Envoyé par sinok Voir le message
    La JTextArea se trouvant dans le JScrollPane, absolument pas besoin de l'ajouter en plus dans ta JFrame. C'est même la source de ton problème. Car un composant instancié ne peut se trouve qu'à un et un seul endroit dans ton interface graphique.
    j'ai donc supprimé la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    centerPanel.add(textArea, BorderLayout.CENTER);
    de même, les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JScrollPane scrollPane = new JScrollPane(textArea);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scrollPane.setViewportView(textArea);
    Sont redondantes. pas besoin du setViewPortView qui est déjà appelé dans le constructeur.
    et la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    centerPanel.add(textArea, BorderLayout.CENTER);
    mais
    cette fois ci, le texte ne s'affiche pas du tout... Je suis un peu paumé avec les GUI en java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/06/2014, 21h35
  2. Mise en page qui s'adapte à la fenêtre
    Par twisel dans le forum Mise en page CSS
    Réponses: 25
    Dernier message: 14/08/2013, 13h19
  3. [Débutant] Adaptation de fenêtre
    Par Mercusyo dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/01/2013, 11h19
  4. [XL-2007] Adapter une fenêtre FileSearch
    Par arnaudTHE dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/01/2013, 09h45
  5. Réponses: 4
    Dernier message: 20/01/2010, 17h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo