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

Agents de placement/Fenêtres Java Discussion :

JPanel à taille variable dans un JScrollPane


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut JPanel à taille variable dans un JScrollPane
    Bonjour,

    Voila je cherche à mettre un JPanel rempli d'images dont je ne connais pas le nombre dans un JScrollPane.Le problème est que si je ne mets pas le setPreferredSize à une valeur super grande, les barres bugs et je ne vois rien Mais si je mets une valeur super grande (10 000 disons ) je vais avoir un JPanel énorme.

    Pour construire mon JScrollPane :

    JScrollPane jsp = new JScrollPane(vuePalette);
    jsp.setPreferredSize(new Dimension(300,600));


    Le JPanel que je veux afficher :
    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
     
    package vue;
     
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.util.ArrayList;
    import java.util.Observable;
    import java.util.Observer;
    import javax.swing.JPanel;
    import modele.Palette;
    import modele.Tuile;
     
    public class VuePalette extends JPanel implements Observer {
     
    	private Palette palette;
    	private ArrayList<VueTuile> vueTuileTab;
     
    	public VuePalette(){
    		new VuePalette(null);
    	}
    	public VuePalette (Palette palette){
    		super();
    		this.palette = palette;
    		vueTuileTab = new ArrayList<VueTuile>();
    		VueTuile tuile = null;
    		if (palette != null){
    			for (Tuile n : palette.getTabTuiles()){
    				tuile = new VueTuile((BufferedImage)n.getImage());
    				vueTuileTab.add(tuile);
    				this.add(tuile);
    			}
    		}
    		this.setPreferredSize(new Dimension(200,10000));
    	}
     
    	@Override
    	public void update(Observable arg0, Object arg1) {
    		palette = (Palette)arg0;
    		repaint();
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    	}
    }

    Si quelqu'un à une idée pour que ma ScrollBar prenne en compte mon JPanel en entier,n'hésitez pas


    Ps: Si je ne mets pas de setPreferredSize, toutes mes images seront alignées horizontalement sur 1 seule ligne.

  2. #2
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Citation Envoyé par Sake_reflex Voir le message
    Bonjour,

    Voila je cherche à mettre un JPanel rempli d'images dont je ne connais pas le nombre dans un JScrollPane.Le problème est que si je ne mets pas le setPreferredSize à une valeur super grande, les barres bugs et je ne vois rien Mais si je mets une valeur super grande (10 000 disons ) je vais avoir un JPanel énorme.

    Pour construire mon JScrollPane :

    JScrollPane jsp = new JScrollPane(vuePalette);
    jsp.setPreferredSize(new Dimension(300,600));


    Le JPanel que je veux afficher :
    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
     
    package vue;
     
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.util.ArrayList;
    import java.util.Observable;
    import java.util.Observer;
    import javax.swing.JPanel;
    import modele.Palette;
    import modele.Tuile;
     
    public class VuePalette extends JPanel implements Observer {
     
    	private Palette palette;
    	private ArrayList<VueTuile> vueTuileTab;
     
    	public VuePalette(){
    		new VuePalette(null);
    	}
    	public VuePalette (Palette palette){
    		super();
    		this.palette = palette;
    		vueTuileTab = new ArrayList<VueTuile>();
    		VueTuile tuile = null;
    		if (palette != null){
    			for (Tuile n : palette.getTabTuiles()){
    				tuile = new VueTuile((BufferedImage)n.getImage());
    				vueTuileTab.add(tuile);
    				this.add(tuile);
    			}
    		}
    		this.setPreferredSize(new Dimension(200,10000));
    	}
     
    	@Override
    	public void update(Observable arg0, Object arg1) {
    		palette = (Palette)arg0;
    		repaint();
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    	}
    }

    Si quelqu'un à une idée pour que ma ScrollBar prenne en compte mon JPanel en entier,n'hésitez pas


    Ps: Si je ne mets pas de setPreferredSize, toutes mes images seront alignées horizontalement sur 1 seule ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public VuePalette(){
     new VuePalette(null);
    }
    Heu ca est une enormité il me semble... enleve le
    A la limite tu peu le remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public VuePalette(){
     super(null);
    }
    Là, tu fais un constructeur de JPanel, avec un layout null (donc il te faut spécifier la position des elements que tu va y ajouter).
    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
     
    public VuePalette (Palette palette){
    		super();
    		this.palette = palette;
    		vueTuileTab = new ArrayList<VueTuile>();
    		VueTuile tuile = null;
    		if (palette != null){
    			for (Tuile n : palette.getTabTuiles()){
    				tuile = new VueTuile((BufferedImage)n.getImage());
    				vueTuileTab.add(tuile);
    				this.add(tuile);
    			}
    		}
    		this.setPreferredSize(new Dimension(200,10000));
    	}
    Et là tu construis ton panel avec un FlowLayout (le layout par defaut);
    Tu devrais essayer avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public VuePalette (Palette palette){
    		super(new GridBagLayout());
    		this.palette = palette;
    //... ton code
    }
    Là, ca devrai mettre chacune de tes images a peu près comme il faut... quoi que faut voir le resultat en fait
    Regarde bien l'utilisation du GridBagLayout dans la JavaDoc, c'est pas trop compliqué.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Utilises un layout adapté au positionnement que tu veux avoir. Il se chargera par lui même de calculer la preferredSize qui sera prise en compte par le JScrollPane...


    a++

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    ==> torg666

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public VuePalette(){
     new VuePalette(null);
    }
    Ça me permettait de ne pas réécrire le code de mon autre constructeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public VuePalette (Palette palette){
    		super();
    		this.palette = palette;
    // Code
    	}
     
     
    }
    Enfin je vais changer si tu dis que ça ne se fait pas

    ==> Tous

    Pour le GridBagLayout j'avais plutôt pensé à un GridLayout car toute les images sont de même taille. Le problème c'est que ça m'afficher les images sur une ligne aussi
    Je l'ai utiliser avec un constructeur vide


    Ps : si vous voulez je peux vous montrez des screens des différents layout avec les problèmes qu'ils me posent

  5. #5
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par Sake_reflex Voir le message
    j'avais plutôt pensé à un GridLayout car toute les images sont de même taille. Le problème c'est que ça m'afficher les images sur une ligne aussi
    Je l'ai utiliser avec un constructeur vide
    Nous pouvons spécifier le nombre de colonnes. Exemple pour une colonne:
    Le zéro pour les lignes signifie que nous pouvons ajouter autant des lignes que nous voulons.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Le problème est que le nombre de colonne/ligne est variable et je ne peux prévoir sa taille
    Car l'utilisateur peut redimensionner la fenêtre; et le nombres d'image au lancement de l'application peut différé

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

Discussions similaires

  1. [AC-2007] Tableau de taille variable dans une feuille d'état
    Par spawny161184 dans le forum IHM
    Réponses: 0
    Dernier message: 08/11/2011, 08h55
  2. [AC-2003] box à taille variable dans form continu
    Par kervin dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/09/2010, 10h01
  3. images de taille variable dans div fixe
    Par delercem dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 16/07/2008, 18h15
  4. Rentrer une selection de taille variable dans une liste d'un userform
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/05/2008, 18h59
  5. Rafraichir un JPanel qui est dans un JScrollPane
    Par anitshka dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 06/12/2004, 23h17

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