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 :

Problème de mise en forme dans une liste personnalisée


Sujet :

AWT/Swing Java

  1. #1
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 320
    Points : 4 284
    Points
    4 284
    Par défaut Problème de mise en forme dans une liste personnalisée
    Bonjour,
    Pour réaliser la liste, j'utilise un JScrollPane avec un JPanel a l'interieur.
    Dans ce JPanel, il y a un JLabel et un autre JPanel (ils sont alternés).
    Je n'ai aucune erreur, exxceptions mais l'affichage ne donne pas ce que je veux :
    Il y a des espaces variable entre les lignes de la liste, les composants a l'interieur ne font pas la taille désirée (ils sont disposés à l'aide d'un GridLayout).
    Savez-vous comment fixer définitivement la taille des composants car même avec object.setSize() ca ne fais pas grand chose
    Merci d'avance

  2. #2
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Salut, tu peux nous montrer le code de ton panel avec le scrollpane et les composants à l'intérieur??

    As-tu utilisé la méthode insets() pour certains composants ce qui expliquerait certains espaces entre les éléments??

    Bref essaie de nous donner un peu plus de détails

    ps : tu as donc deux panels, dont le premier qui contient le second. Les deux utilisent un gridLayout?

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 320
    Points : 4 284
    Points
    4 284
    Par défaut
    D'accord, voici le code :
    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    public class SkillView extends JPanel {
    	public static final long serialVersionUID=0;
    	private skill.ClassList professions=new skill.ClassList();
    	private JScrollPane list=new JScrollPane();
    	public SkillView() {
    		this.setLayout(new BorderLayout());
    		this.add(classView(), BorderLayout.NORTH);
    		list.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    		list.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    		list.setViewportView(attributeView(professions.getClassByCode("W")));
    		this.add(list, BorderLayout.CENTER);
    		System.out.println(professions.toString());
    	}
    	private JPanel lineView(skill.Skill s) {
    		JPanel g=new JPanel(new GridLayout(1, 6));
    		if(s.elite) g.setBackground(Color.GREEN);
    		//g.setDropTarget(dt);
    		JLabel[] line={null, null, new JLabel(), new JLabel(), new JLabel(), new JLabel()};
    		line[0]=new JLabel(new ImageIcon("ressources/images/skills_small/"+s.code+".jpg"), SwingConstants.LEFT);
    		line[0].setSize(50, 32);
    		g.add(line[0]);
    		line[1]=new JLabel(s.code, SwingConstants.LEFT);
    		//line[1].setSize(200, 32);
    		g.add(line[1]);
    		if(s.adrenaline>0) {
    			line[2]=new JLabel(Integer.toString(s.adrenaline), new ImageIcon("ressources/images/icons/adrenaline.gif"), SwingConstants.LEFT);
    		}
    		if(s.energyCost>0) {
    			line[2]=new JLabel(Integer.toString(s.energyCost), new ImageIcon("ressources/images/icons/energy.gif"), SwingConstants.LEFT);
    		}
    		line[2].setSize(50, 32);
    		g.add(line[2]);
    		if(s.castTime>0) {
    			line[3]=new JLabel(Double.toString(s.castTime), new ImageIcon("ressources/images/icons/cast.gif"), SwingConstants.LEFT);
    		}
    		line[3].setSize(50, 32);
    		g.add(line[3]);
    		if(s.rechargeTime>0) {
    			line[4]=new JLabel(Double.toString(s.rechargeTime), new ImageIcon("ressources/images/icons/recharge.gif"), SwingConstants.LEFT);
    		}
    		line[4].setSize(50, 32);
    		g.add(line[4]);
    		if(s.energyArrow==1) {
    			line[5]=new JLabel(Integer.toString(s.energyArrow), new ImageIcon("ressources/images/icons/energyHolding.gif"), SwingConstants.LEFT);
    		}
    		line[5].setSize(50, 32);
    		g.add(line[5]);
    		return g;
    	}
    	private JScrollPane attributeView(skill.Class c) {
    		JPanel jp=new JPanel(new GridLayout(c.attributes.size() * 2, 1)), jp1=null;
    		JLabel cat=null;
    		for(int i=0; i<c.attributes.size(); i++) {
    			cat=new JLabel(c.attributes.get(i).code);
    			cat.setHorizontalAlignment(SwingConstants.CENTER);
    			cat.setSize(200, 50);
    			jp.add(cat);
    			jp1=new JPanel(new GridLayout(c.attributes.get(i).skills.size(), 1));
    			for(int j=0; j<c.attributes.get(i).skills.size(); j++) {
    				jp1.add(lineView(c.attributes.get(i).skills.get(j)));
    			}
    			jp.add(jp1);
    		}
    		return new JScrollPane(jp);
    	}
    	private JPanel classView() {
    		String[] tags=professions.getClassTags();
    		JPanel icons=new JPanel(new GridLayout(1, tags.length));
    		ClassButton[] bprof=new ClassButton[tags.length];
    		for(int i=0; i<tags.length; i++) {
    			bprof[i]=new ClassButton(new ImageIcon("ressources/images/class/"+tags[i]+".gif"));
    			bprof[i].setSize(90, 90);
    			bprof[i].classCode=tags[i];
    			bprof[i].setFocusPainted(false);
    			bprof[i].setBorderPainted(false);
    			bprof[i].setContentAreaFilled(false);
    			icons.add(bprof[i]);
    		}
    		return icons;
    	}
     
    	private class ClassButton extends JButton {
    		public static final long serialVersionUID=0;
    		public  String classCode;
    		public ClassButton(ImageIcon i) {
    			super(i);
    			this.addActionListener(new ActionListener(){
    				public void actionPerformed(ActionEvent ae){
    					list.setViewportView(attributeView(professions.getClassByCode(classCode)));
    				}
    			});
    		}
     
    	}
    }

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    ca me parait un peu "brut" pour gérer une liste.

    ne peux tu pas utiliser une JTable?


    sinon pour l'organisation de tes composants je pense qu'un GridBagLayout serait plus approprié.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 320
    Points : 4 284
    Points
    4 284
    Par défaut
    Un JTable ca me parrait faire un peu tableur style Excel (d'apres les exemples que j'ai vu), je vais donc jeter un oeil pour le GridBagLayout pour commencer.

  6. #6
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    Ou encore contenir ton panneau en GridLayout dans un borderLayout aligner au nord.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JPanel global = new JPanel(new BorderLayout());
    JPanel panel = new JPanel(new GridLayout(6,1));
     
    global.add("NORTH",panel);
    de cette facon ton panel est toujours le plus compacte possible

    c'est plus simple a appliquer qu'un gridBagLayout

  7. #7
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Je suis d'avis que la JTable reste une très bonne option.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 320
    Points : 4 284
    Points
    4 284
    Par défaut
    Ca bug, c'est tout tasser en haut

    Dans un JTable, je peux mettre des images et des JLabels ??

  9. #9
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Oui il faut à ce moment-là modifier le cell renderer de la JTable.

    Regarde dans la javadoc

    Pour les images et si tu veux dire icônes, pas de problème. De plus les textes dans les colonnes sont des JLabels donc ça devrait t'aller

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 320
    Points : 4 284
    Points
    4 284
    Par défaut
    Il est possible de fusionner plusieurs cellules dans un JTable ??
    Comment définir une grille ??
    Pour faire un glisser en partant d'une ligne ca ne va pas me poser problème ??
    Je vais jeter un oeil au TabbleLayout car le GridBagLayout et le JTable sont assez complexe a utiliser

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 320
    Points : 4 284
    Points
    4 284
    Par défaut
    J'ai résolu mon problème d'alignement grace à un FlowLayout et en utilisant setPreferredSize pour définir la taille des elements mais j'ai toujours le même problème d'alignement vertical. Existe-t-il l'équivalent du FlowLayout pour des dispositions verticales ??

  12. #12
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Pour des dispositions verticales, le gridLayout avec une seule colonne doit aller.

    Sinon regarde les différents layouts par ici et fait ton marché

    http://java.sun.com/docs/books/tutor...yout/grid.html

  13. #13
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 320
    Points : 4 284
    Points
    4 284
    Par défaut
    Merci pour tout mais j'ai réussi à corriger la mise en forme en combinant un BoxLayout et des FlowLayout.

  14. #14
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    De rien en espérant t'avoir aidé un peu bonne chance pour la suite

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/10/2007, 12h18
  2. Mise en forme d'une liste
    Par Olivier Regnier dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 01/10/2007, 17h44
  3. Pb de mise en forme dans une liste de selection
    Par crashyear dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2006, 11h58
  4. Sauvegarder une mise en forme dans une RichTextBox
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 29/12/2005, 12h19

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