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 :

[Java][Swing] Un composant pour sélectionner


Sujet :

Composants Java

  1. #21
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Ben la ton code tu l'as déjà, il suffit de modifier à partir du code dejà généré.
    Sinon pour en revenir à l'outil, c'est surtout que comme tout générateur, il faut un certain temps pour le prendre en main et lui faire générer le code voulu. C'est pour ça que je suis pas hyper fan des générateurs, en particulier ceux qui ne sont pas intuitifs (tiens Struts, comment ça va?)

    J'ajouterai que pour bien utiliser un générateur, il faut bien comprendre ce qu'il génère (ne serait-ce que pour comprendre ce qu'il génère mal, un générateur n'étant pas forcément adapté à tous les cas!).

    Donc commencer par faire des trucs à la main...

  2. #22
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Faire à la main ne me dérange pas, je ne demande que ça !
    Maintenant pour compiler, tester et positionner des composant, c'est extra .

  3. #23
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 866
    Points : 22 912
    Points
    22 912
    Billets dans le blog
    51
    Par défaut
    Hum quel est le probleme au fait ?

    Tu peux mettre directement des objets de type De dans la JComboBox, car ce qui s'affiche dans la liste est en fait dependant du ListCellRenderer qui est mis sur ce meme composant et donc un DefaultListCellRenderer customise peut tres bien afficher une string correct pour chaque De ou afficher un dessin ou...

    Il est aussi possible d'utiliser un JSPinner pour de tels choix restreints mais la creation d'un modele et d'un editeur/renderer customise est un peu plus complexe.

    Si le choix est assez restreint (2~4 valeurs) on peut tout aussi bien mettre 2~4 JCheckBox qui sont dans un meme ButtonGroup. Quand le choix est trop large mieux vaut utiliser une JList (dont la selection a ete limitee a 1 objet), une JComboBox ou un JSpinner.

    Enfin malgre les restrictions de NetBeans (que je deteste et qui parfois foirent tellement qu'il faut aller corriger le code a la main), il est souvent possible de mettre du code custom pour telle ou telle propriete en passant par l'editeur du composant ou son editeur de propriete.

    Sinon la VF de populate c'est peupler.

  4. #24
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par bouye Voir le message
    Hum quel est le probleme au fait ?
    Et bien je veux afficher dans une liste de choix 7 dès à jouer qui après sélection me renvoie les 7 valeurs nominales sélectionner.

    Dès 4 me retournera dans une variable 4
    Dès 6 me retournera dans une variable 6
    Dès 8 me retournera dans une variable 8
    Dès 10 me retournera dans une variable 10
    Dès 12 me retournera dans une variable 12
    Dès 20 me retournera dans une variable 20
    Dès 100 me retournera dans une variable 100

    La variable en question sera nommé "int Faces;".

    Citation Envoyé par bouye Voir le message
    Tu peux mettre directement des objets de type De dans la JComboBox, car ce qui s'affiche dans la liste est en fait dependant du ListCellRenderer qui est mis sur ce meme composant et donc un DefaultListCellRenderer customise peut tres bien afficher une string correct pour chaque De ou afficher un dessin ou...
    Stop, comment faire ceci ?
    Il me semble que ma classe est incomplète, elle ne contient aucune liste.

    Citation Envoyé par bouye Voir le message
    Il est aussi possible d'utiliser un JSPinner pour de tels choix restreints mais la creation d'un modele et d'un editeur/renderer customise est un peu plus complexe.
    Ok, on va éviter, la solution juste au dessus me va !

    Citation Envoyé par bouye Voir le message
    Si le choix est assez restreint (2~4 valeurs) on peut tout aussi bien mettre 2~4 JCheckBox qui sont dans un meme ButtonGroup. Quand le choix est trop large mieux vaut utiliser une JList (dont la selection a ete limitee a 1 objet), une JComboBox ou un JSpinner.
    J'y ai pensé au départ mais je risque de faire de nouvelles entrées par la suite dans ma liste... Donc on oublie cette méthode.

    Citation Envoyé par bouye Voir le message
    Enfin malgre les restrictions de NetBeans (que je deteste et qui parfois foirent tellement qu'il faut aller corriger le code a la main), il est souvent possible de mettre du code custom pour telle ou telle propriete en passant par l'editeur du composant ou son editeur de propriete.
    Oui, parfois il me propose de faire de tel modification mais pas dans le cas du composant que j'ai choisit.

    Après, si il faut tout reprendre à 0, pas de souci. Pour affiché des images plutôt que du texte, j'en viendrais surement à ce résultat dans quelques temps mais pour le moment j'essaie de resté simple.

  5. #25
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Citation Envoyé par bouye Voir le message
    Sinon la VF de populate c'est peupler.
    Je suis un gros naze

  6. #26
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Comment ça Jdéfix ?

    [Edit]
    Je viens de trouver ou était la fonction custimize du composant. Je met quoi dedans maintenant ?

  7. #27
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Citation Envoyé par Microbulle Voir le message
    Comment ça Jdéfix ?
    Pour la traduction de populate, j'ai même pas trouvé le mot français,
    Bientot je vais parler de workflow, de roadmap, de Business plan etc.
    c'est le début de la fin

  8. #28
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Ok, ce n'est pas grave !

    Ceci dit, maintenant que j'ai trouver comment customiser mon code, il faut que je réussisse à écrire la liste des dès et leurs correspondances.

  9. #29
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 866
    Points : 22 912
    Points
    22 912
    Billets dans le blog
    51
    Par défaut
    Un truc comme ca devrait faire l'affaire:

    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
    public enum Dice {
      D4(4), D6(6), D8(8), D10(10), D12(12), D20(20), D100(100);
      private int faces;
     
      private Random random = new Random();
     
      Dice(int faces) {
         this.faces = faces;
      }
     
      public int getFaceCount() {
         return faces;
      }
     
      public int roll() {
         // Prevoir un generateur de nombres aleatoires plus evolue avec une seed, etc...
         return 1 + random.nextInt(faces);
      }
     
      public static Dice getDice(int faces) throws IllegalArgumentException {
        if (faces <= 2) {
          throw new IllegalArgumentException("Number of faces must be >= 2");
        }
        Dice result = null;
        for (Dice dice : values()) {
          if (dice.faces == faces) {
            result = dice;
            break;
          }
        }
        if (result == null) {
          throw new IllegalArgumentException("There is no pre-defined dice for "+faces+" faces.");
        }
        return result;
      }
    }
    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
     
    // Peuplement de la liste.
    for (Dice dice : Dice.values()) {
      combo1.addItem(dice);
    }
    combo1.addItemListener(new ItemListener () {
      /**
       * {@inheritDoc}
       */
      @Override
      public void itemStateChanged(ItemEvent e) {
        switch (e.getStateChange()) {
          case ItemEvent.SELECTED:
            Dice dice = (Dice)combo1.getSelectedItem();
            System.out.println("Rolling a "+dice.getFaceCount()+" faces dice: "+dice.roll());
          break;
          default:
        }
      } 
    });
    // Normalent on peut directement mettre du custom code sur cette propriete dans NetBeans,
    // Mais comme l'editeur deraille parfois, je te conseille de creer une classe nommee (DiceListCellRenderer) et de faire juste
    // combo1.setCellRenderer(new DiceListCellRenderer()); dans l'editeur de custom code.
    // Meme chose pour le listener quoi que l'edition d'evenement fonctionne un peu mieux je trouve.
    combo1.setCellRenderer(new DefaultListCellRenderer() {
     /**
      * {@inheritDoc}
      */
     @Override
     public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
       super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
       Dice dice = (Dice)value;
       String text = "Dé "+dice.getFaceCount()+" faces";
       setText(text);
       // On pourrait mettre une icone appropriee aussi, un tooltip, etc.
       return this;
     }
    }
    De plus, meme si tu ne peux pas editer directement les zones de code reservees dans lesquelle la GUI est declarer, rien ne t'empeche de mettre du code qui manipule la GUI ou change les proprietes en dehors des zones de bloc reserve (juste apres l'appel a initComponents() dans le constructeur par exemple).

  10. #30
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Et bien c'est un bon peu complexe !

    Je voudrais bien voir étape par étape, car j'avoue que j'ai un peu de mal avec ton code bouye.

  11. #31
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 866
    Points : 22 912
    Points
    22 912
    Billets dans le blog
    51
    Par défaut
    Complexe ?

    Alors...
    L'enum Dice contient la definition des des ainsi que la methode roll() qui permet de faire le tirage sur le nombre de faces en question.
    Il y a aussi une methode statique qui permet de recuperer une instance de Dice en fonction d'un entier passe en parametre.

    Le code apres ne contient que 3 lignes majeures :
    1. Une boucle qui remplit la combo box avec des instances de Dice.
    2. On met un ecouteur d'evenement sur la combo qui fait un tirage sur le de selectionne (le code ignore les evenements de deselection) => voir les classes ItemListener et ItemEvent.
    3. On met un renderer sur la combo pour afficher une chaine de character customisee de maniere a afficher correctement le nom du de affiche => voir l'interface ListCellRenderer et la classe DefaultListCellRenderer (l'implementation concrete par defaut).

Discussions similaires

  1. [Java][Swing] Récupérer composant
    Par stanilas dans le forum Composants
    Réponses: 2
    Dernier message: 06/02/2011, 13h22
  2. [Java][Swing] Un composant pour sélectionner
    Par Caxton dans le forum NetBeans Platform
    Réponses: 0
    Dernier message: 03/11/2009, 12h48
  3. [FLASH 8] Composant pour sélectionner une couleur
    Par aldo-tlse dans le forum Flash
    Réponses: 1
    Dernier message: 07/12/2007, 15h03
  4. Réponses: 4
    Dernier message: 25/11/2005, 11h25
  5. Composant pour sélectionner l'heure et la durée
    Par popo dans le forum Composants VCL
    Réponses: 14
    Dernier message: 18/06/2005, 01h21

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