Scroll sur une JFrame

cs_arsenelupin Messages postés 2 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 28 janvier 2004 - 21 janv. 2004 à 10:32
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 - 20 sept. 2010 à 12:01
J'ai une JFrame sur laquelle je veux mettre une barre de défilement parce que y'en a beaucoup d'informations à afficher dessus. Dois-je passer par un JPanel ou il y a-t-il une autre solution ?

Pour l'instant j'ai écrit ceci (qui ne marche pas, sinon je serai pas là)

JScrollPane scrollF;
JPanel pan = new JPanel();
pan.setLayout(null);
pan.add( /* composant */ );
pan.setBounds(0,0,1500,1500);
scrollF = new JScrollPane(pan);
scrollF.setBounds(0,0,500,650);
scrollF.setVisible(true);
pan.setVisible(true);
this.getContentPane().add(scrollF);

Ce code m'affiche tout sauf la barre de défilement.
Je ne m'en sors pas, vite que quelqu'un me vienne en aide !!!

Arsène Lupin :clown)

5 réponses

ioiomatic Messages postés 44 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 9 mars 2004 3
21 janv. 2004 à 12:09
Salut,

les mises en forme swing sont assez déconcertantes dans un 1er temps. Pour ne pas entrer dans les détails il faut savoir que si ton JPanel, quelque soit sa taille, ne contient aucun composant, tu n'auras jamais tes barres de défilement. Montons un cran plus haut. Si ton JScrollpane est capable d'afficher son contenu dans ta JFrame, tu n'auras jamais tes barres de défilement. Cela veut tout simplement dire que tes barres de défilement ne s'afficheront que si la taille de ta JScrollPane venait à être plus grande que ta JFrame et ce seulement si elle l'est(plus grande) par la taille imposée par son contenu. Oui, je sais c'est pas évident à comprendre.
Pour compléter mon explication voilà un exple:
import javax.swing.*;
import java.awt.*;

public class ArseneLupin{
public static void main(String[] arg){
JFrame maframe = new JFrame("Arsene Lupin");
JPanel pan = new JPanel();
JScrollPane scrollF;
JTextArea texte = new JTextArea();
//for(int i = 0; i < 10; i++){
//texte.append("il était une fois un cheval de troies\n");
//}
pan.add(texte);

pan.setBounds(0,0,20,20);
scrollF = new JScrollPane(pan);
scrollF.setMinimumSize(new Dimension(200, 200));
scrollF.setVisible(true);
pan.setVisible(true);
maframe.setSize(new Dimension(150, 150));
maframe.getContentPane().add(scrollF);
maframe.setVisible(true);
}
}
Tu as juste à faire un copier coller. dans un 1er temps, tu compileras et executeras le code tel quel, puis dans un 2nd temps, tu retireras les slash pour prendre en compte le traitement de la boucle for, et recompileras et réexecuteras l'exple.....Je pense que tu y verras plus clair....
Bon courage Arsene !
0
cs_arsenelupin Messages postés 2 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 28 janvier 2004
28 janv. 2004 à 10:53
Ton code m'a fait comprendre certaines choses.
Cependant, lorsque j'ajoute la ligne :

pan.setLayout(null)

Ca ne marche plus, il ne m'affiche plus les composants. Pourquoi, et comment faire pour obtenir malgré tout la l'affichage des composants et de la scroll ?

J'ai besoin de la ligne de code ci-dessus car je place tous mes composants grâce à la méthode setBounds.

Merci d'avance...

Arsène Lupin :clown)
0
ioiomatic Messages postés 44 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 9 mars 2004 3
28 janv. 2004 à 18:21
tu as nécessairement besoin d'un layout pour ajouter des composants sur d'autres composants. Par défaut, quand tu instancies un composant pouvant potentiellement contenir un autre composant, un layout est aussi défini. Le layout est une couche sur laquelle tu vas pouvoir ajouter d'autres composant. Donc ton panel sans layout ne pourra rien recevoir. la ligne pan.setLayout(null) retire donc le layout de ton panel et celui-ci ne peut plus recevoir de composant d'où le résultat que tu obtiens. Ce qu'il faut retenir: ce n'est pas le composant qui reçoit un autre composant mais son layout(ce serait la colle qui te permet de faire tenir le papier peint sur un mur). la méthode setLayout sert plutôt à définir un layout particulier pour un composant. Si tu veux avoir la liberté de donner les dimensions que tu souhaites à tes composants, sers toi de GridBagLayout pour le layout, et GridBagConstraints pour la mise en forme.
0
paulsaw Messages postés 1 Date d'inscription vendredi 17 septembre 2010 Statut Membre Dernière intervention 17 septembre 2010
17 sept. 2010 à 18:17
aider moi à comprendre les classes abstraites et les classes filles.merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
20 sept. 2010 à 12:01
Salut paulsaw, il vaudrait mieux que tu poses une vraie question dans un topic dédié.
0
Rejoignez-nous