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

Composants Java Discussion :

JList : ajuster largeur dans un GridBagLayout


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Par défaut JList : ajuster largeur dans un GridBagLayout
    Salut tout le monde !
    Je développe actuellement un gestionnaire de séries télévisées (pour suivre son avancement dans plusieurs séries, connaître les dates de sorties, etc...).

    Mon interface ressemble à ça :


    Le tout repose sur un GridBagLayout :

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    package gUI
     
    import javax.swing.*
    import java.awt.GridBagLayout
    import groovy.swing.*
    import ca.odell.glazedlists.*;
    import ca.odell.glazedlists.swing.*;
    import outils.*;
     
     
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
     
    EventList testListe = new BasicEventList();
     
     
     
    testListe.addAll(BDD.versCollection("select * from series where suivi"))
    EventListModel testModel = new EventListModel(testListe);
    JList testJList = new JList(testModel);
     
    String testStr = "Salut";
    /*
    double t1=System.currentTimeMillis();
    double Delta = 100;
    while(System.currentTimeMillis()<t1+Delta); 
    */
     
    // définition de la fenêtre à propos
    def aPropos = new SwingBuilder().dialog(title: 'A propos', defaultCloseOperation: JFrame.HIDE_ON_CLOSE,
            size: [300, 200], show: false, resizable: false, locationRelativeTo: null) {
        gridBagLayout()
        label(text:'salut')
    }
     
     
    // définition fenêtre principale
    def framePrincipale = new SwingBuilder().frame(title: 'Gestionnaire de séries', defaultCloseOperation: JFrame.EXIT_ON_CLOSE,
    					size: [800, 600], show: true, locationRelativeTo: null) {
    	menuBar() {
    		menu(text: "Fichier", mnemonic: 'F') {
    			menuItem(text: "Quitter", mnemonic: 'X', actionPerformed: { System.exit(0) })
    		}
    		menu(text:"Données", mnemonic: 'D'){
    			menuItem(text:"Importer son avancement", mnemonic: 'I')
    			menuItem(text:"Exporter sous forme de fichier", mnemonic: 'E')
    		}
    		menu(text:"Aide", mnemonic: 'A'){
    			menuItem(text:"Aide...", mnemonic: 'H')
    			menuItem(text:"A propos", mnemonic: 'B', actionPerformed:{aPropos.show()})
    		}
    	}
    	gridBagLayout() // défini le layout choisi
     
    /*Notion de contraintes pour les composants ajoutés au grid bag layout :
     * (source des exemples : http://www.java2s.com/Code/Java/Swing-JFC/GridBagLayoutPane.htm)
     * constraints:gbc(
     * 		gridx gridy == coordonnées de la case
     * 		gridwidth gridheight == largeur en CASE ! 
     *      weightx weighty == poids de la case
     * 		fill == horizontal, vertical ou les deux (both)
     * 		inset == marge intérieure (entre l'objet et le bord de la fenêtre)
     * 	)
     * => constraints:gbc(gridx:,gridy:,gridwidth:,gridheight:,fill:java.awt.GridBagConstraints.BOTH,inset:[,,,])
    */
    	scrollPane(constraints:gbc(
    					gridx:0,
    					gridy:0,
    					gridwidth:1,
    					gridheight:2,
    					fill:java.awt.GridBagConstraints.VERTICAL,
    					insets:[0,0,0,0],
    					weightx:0.0,
    					weighty:1.0)
    					){
     	 	list(model:testModel,mouseClicked:{println it})
    	}
    	button(text:"+/-",constraints:gbc(
    					gridx:0,
    					gridy:2,
    					weighty:0.0,
    					weightx:0.0))
     
    	scrollPane(constraints:gbc(
    					gridx:1,
    					gridy:0,
    					gridwidth:2,
    					fill:java.awt.GridBagConstraints.BOTH,
    					weightx:1.0,
    					insets:[0,0,0,0])
    					){
    			panel(){
    				 gridBagLayout()
    				 label(text:testStr,constraints:gbc(gridx:0,gridy:0))
    				 label(text:'Salutations',constraints:gbc(gridx:1,gridy:0))
    				 label(text:'',constraints:gbc(gridx:2,gridy:0))
    				 label(text:'Liste séries',constraints:gbc(gridx:0,gridy:1,gridwidth:3))
     
    			}
    	}
     
    	separator(constraints:gbc(
    			gridx:0,
    			gridy:3,
    			gridwidth:3,
    			fill:java.awt.GridBagConstraints.HORIZONTAL))
     
        label(text:'Application en construction... Attention à la peinture fraîche.',
        		constraints:gbc(
        				gridx:0,
        				gridy:4,
        				gridwidth:2,
        				weightx:0))
     
    }
    J'utilise les fonctionnalités des Glazed list pour le ListModel

    J'ai deux problèmes :

    - Quand j'effectue un mouseClicked sur un item, comment récupérer l'id de la ligne cliquée ? Là avec mon "println it" j'obtiens des lignes du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.awt.event.MouseEvent[MOUSE_CLICKED,(24,31),absolute(269,162),button=1,modifiers=Button1,clickCount=1] on javax.swing.JList[,0,0,48x510,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=51,g=153,b=255],selectionForeground=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],visibleRowCount=8,layoutOrientation=0]
    - J'aimerais bien fixer une largeur à la case du gridbaglayout qui contient la liste, mais j'ai du mal à voir comment faire.

    Voilà merci pour toute aide, désolé pour mon code s'il ne constitue pas un modèle de lisibilité.
    J'utilise Groovy pour me simplifier la vie, mais je n'ai rien contre une solution en Java pur car Groovy accepte le code java sans broncher.


  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Par défaut
    Ah, problème principal résolu :
    mes items ajouté aux GridBagLayout étaient anonymes, donc impossible de récupérer leurs infos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     	 	theListe = list(id:'list',model:testModel,mouseReleased:{
     	 		println it.getClickCount()
     	 		String triggerName = (String) theListe.getModel().getElementAt(
     	 				theListe.getSelectedIndex());
     	 		println triggerName
     	 		}
    voilà :p

    J'ai toujours besoin de conseil sinon pour fixer la largeur d'une case (celle contenant la JList)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Par défaut
    Hmmm vraiment personne ?

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    setPreferredSize sur ta JList (ou son JScrollPane associé) devrait faire l'affaire. Mais bon hardcoder une taille dans une interface ce n'est jamais bon, par exemple si ton utilisateur bosse sur un notebook, il risque d'avoir du mal à voir ton interface dans son intégralité. Et au contraire pour un utilisateur ayant un très grande résolution.

    Mieux vaut gérer ça via les poids de redimensionnement weighty et weightx qui indiquent plus ou moins la proportion de l'écran que doit prendre le composant au redimensionnement, c'est plus propre et plus portable.

Discussions similaires

  1. reduction dans un GridBagLayout
    Par arasium dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 21/06/2006, 11h37
  2. Réponses: 2
    Dernier message: 22/05/2006, 11h34
  3. Inserer une JList ou JTextarea,... Dans une Image
    Par Battosaiii dans le forum Composants
    Réponses: 3
    Dernier message: 17/12/2005, 12h39
  4. [Layout] Mettre un Canvas dans un GridBagLayout
    Par arnobidul dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 06/09/2005, 11h17
  5. Redimensionner une JList en largeur
    Par billyboy dans le forum Composants
    Réponses: 3
    Dernier message: 06/06/2004, 17h48

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