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

AWT/Swing Java Discussion :

Scrollable JPanel dans un autre JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Par défaut Scrollable JPanel dans un autre JPanel
    Bonjour,
    J'ai un petit soucis avec une application que je développe.
    Actuellement, j'ai deux classes A et B qui héritent toutes les deux d'un JPanel.
    J'ai une instance myPanel de la classe B qui est contenue dans une instance a de la classe A. L'instance a est plus large que l'instance myPanel, donc j'ai des marges des deux côtés de myPanel. L'instance myPanel contient des JLabels et des JTextFields, positionnés avec la méthode setBounds().
    Je cherche à faire apparaître un scroll d'un côté de l'instance myPanel quand le contenu de cette instance dépasse sa hauteur, mais je n'y arrive pas.
    J'essaye d'utiliser un JScrollPane dans lequel je mets mon instance myPanel, mais je n'ai rien qui apparaît à l'écran.

    La partie du code ressemble à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class A extends JPanel{
    ...
     
    B myPanel = new B(...);
    myPanel.setLayout(null);
    ... //Remplissage du panel
    JScrollPane scroll = new JScrollPane(myPanel);
    add(scroll);
    ...
    }
    Je n'ai rien qui s'affiche, tandis que quand je fais tout simplement:
    au lieu de
    dans l'exemple précédent, j'ai tout le contenu qui s'affiche.

    Quelqu'un aurait-il des idées ou une piste pour des solutions, s'il-vous-plaît?

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    Euh je dit peut etre une connerie mais si tu désactive le layout il faut que tu 'bounds' (lui donne des coordonnées, une taille) le JScrollPane non?

    En tout cas moi c'est ce que je fait, et je met des JTables dedans et ca marche.
    J'utilise ca perso :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jScrollPaneNom = new JScrollPane();
    jScrollPaneNom.setBounds(1160, 50, 108, 531);
    jScrollPaneNom.setViewportView(getJTableNom());

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Par défaut
    J'avais essayé de définir les bounds comme tu dis, Génoce, mais j'obtiens un panel gris là où devrait se trouver mon JScrollPane. J'ai pas de contenu dedans. :s
    Alors que, comme dit, le contenu existe bien puisque quand je rajoute (avec add() ) le panel lui-meme au lieu du JScrollPane, tout s'affiche correctement.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    Bonjour,
    juste un conseille n'utilise jamais setBounds avec un layout(null), c'est très prise de tête et tu dois faire gaffe à la resoloution de l'écran. Utilise plutot un layout c'est fait pour simplifier le positionnement de tes composants.

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Par défaut
    Citation Envoyé par atha2 Voir le message
    Bonjour,
    juste un conseille n'utilise jamais setBounds avec un layout(null), c'est très prise de tête et tu dois faire gaffe à la resoloution de l'écran. Utilise plutot un layout c'est fait pour simplifier le positionnement de tes composants.
    Je sais, mais le soucis c'est que je suis en train de faire des sortes de questionnaires à remplir, avec un positionnement dynamique en fonction des données auxquelles on s'attend. Je passe d'une ligne où je mets 3 JLabels à une ligne où je mets 5 JTextFields, et ensuite 2 autres labels à la ligne suivante, etc... Donc j'ai pas vraiment le choix...

    Sinon, pour le scroll, ça marche toujours pas.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    Tu peut montrer tous ton code pour que je puisse voir...?

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Par défaut
    Voila les code correspondant (presque) complet.
    DetailsPanel et ContenuPanel sont des classes qui heritent de JPanel, et qui precisent certains comportements, nottament des differents boutons et pour le positionnement.

    La classe HealthPanel, qui correspond a la classe A dans mon premier poste:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    public class HealthPanel extends DetailsPanel {
     
    	public HealthPanel(int val, int pages) {
    		super(val, MyConstants.HEALTH_FOLDER, pages);
    		initialize();
    	}
     
    	private void initialize() {
    		int i;
     
    //	       First, we need to set up the page-related buttons
    		if(page == 0){
    			retButton.setText("Accueil");
    		} else {
    			retButton.setText("Retour");
    		} //Le positionnement de retBouton est gere dans DetailsPanel
     
    		//Now, we need to initialize the entry data flow
    		initData();
    		// We create the different pages panels
     
    		scrollPane.setLayout(null);
     
    		// We add the different components
    		if(inPanel[page] == null){
    			switch(page){
     
    			...
     
    			case 6:		inPanel[page] = new Recap1Panel(person, this);
                                                    //Les trois bouttons suivants sont definis dans DetailsPanel
    						this.submitButton.setVisible(true);
    						this.prevButton.setVisible(true);
    						this.nextButton.setVisible(true);
    						break;	
                            ...						
     
    			default:	break;
    			}
     
    			inPanel[page].setBounds(0, 0, this.contentWidth, this.contentHeight);
    			inPanel[page].setLayout(null);
    			inPanel[page].setBackground(MyWindow.bs_bg);
     
    		}
    		scrollPane.setBounds(0, 0, this.contentWidth, this.contentHeight);
    		scrollPane.setViewportView(inPanel[page]);
    		this.add(scrollPane, null);
    		attach.reload(); /*attach est un autre JPanel qui se positionne a droite du inPanel[panel]
                                                   On s'en fout ici. */
    	}
     
    	public void submit(){
    		inPanel[page].submit();
    		inPanel[page].setVisible(false);
    		inPanel[page] = null;
    		initialize();
    	}
     
    	public void reload(){
    		inPanel[page].setVisible(false);
    		inPanel[page] = null;
    		page = 0;
    		initialize();
    	}
     
    	public void redo(int val, boolean submit){
    		if(MyWindow.edit) { // Si en mode editable... 
    			submitButton.setEnabled(true);
    		}
    		else {
    			submitButton.setEnabled(false); /* Si on est en mode consultation, le bouton valider doit 
    								  			  * s'afficher en grisé et non-actif */
    		}
    		if(submit) {
    			inPanel[page].submit(); //submit est-il autorise?
    		}
    		inPanel[page].setVisible(false);
    		inPanel[page] = null;
    		this.page = val;
    		initialize();
    	}
    } //HealthPanel
    La classe Recap1Panel correspond a ma classe B du premier poste, et elle contient des methodes qui la remplissent, avec une indentation dynamique du positionnement des differents elements (JLabels et JTextFields).

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 7
    Par défaut
    J'ai resolu mon probleme, donc c'est bon.

    Il fallait au fait recalculer le rectangle necessaire et l'indiquer dans setPreferredSize() a la fin de la construction du contenu des instances de la classe A.

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

Discussions similaires

  1. Afficher deux fois le meme Jpanel dans un autre Jpanel
    Par ryu20 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 06/11/2009, 01h31
  2. JPanel dans un autre JPanel
    Par richard_sraing dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 27/08/2009, 14h12
  3. Réponses: 8
    Dernier message: 30/03/2009, 12h45
  4. Donner le focus à un JPanel dans un autre JPanel
    Par Azanael dans le forum Agents de placement/Fenêtres
    Réponses: 17
    Dernier message: 21/06/2005, 23h34

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