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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 500
    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 émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    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
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 500
    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 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    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
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 500
    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 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    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 émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

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

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

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 500
    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 émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    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

+ 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