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

Langage Java Discussion :

[javabean composant] Affichage run-time


Sujet :

Langage Java

  1. #1
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut [javabean composant] Affichage run-time
    Bonjour,

    J'ai un problème avec un JavaBean. Il s'agit d'un composant visuel dérivé d'un JPanel contenant un nombre variable de JRadioButton. Voici une version expurgée mais fonctionnelle du 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
    public class JPetrusRadioButtonsPanel extends JPanel implements Serializable {
        private String[] buttonsList = {"Paris", "Bordeaux", "La Mans", "Cournonterral"};
     
        public JPetrusRadioButtonsPanel() {
            initComponents();
        }
     
        private void initComponents() {
            JRadioButton[] JRB = new JRadioButton[buttonsList.length];
            ButtonGroup buttonGroup = new ButtonGroup();
            removeAll();
            setBorder(BorderFactory.createTitledBorder(
                               null, 
                               buttonsList[0], // pour debug
                               TitledBorder.DEFAULT_JUSTIFICATION,
                               TitledBorder.DEFAULT_POSITION,
                               new Font("Tahoma", 0, 12)));
            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
            for(int i = 0;  i < buttonsList.length; i++){
                JRB[i] = new JRadioButton();
                buttonGroup.add(JRB[i]);
                JRB[i].setText(buttonsList[i]);
                JRB[i].setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
                JRB[i].setMargin(new Insets(0, 0, 0, 0));
                add(JRB[i]);
            }
        }
     
        public String getButtonsList(int index) {
            return buttonsList[index];
        }
     
        public String[] getButtonsList() {
            return buttonsList;
        }
     
        public void setButtonsList(int index, String buttonsList) {
            this.buttonsList[index] = buttonsList;
            initComponents();
        }
     
        public void setButtonsList(String[] buttonsList) {
            this.buttonsList = buttonsList;
            initComponents();
        }
    }
    J'utilise NetBeans. Le composant se comporte correctement au design-time avec Matisse. C'est à dire qu'il se redessine dans problème quand on modifie buttonsList, et qu'il n'y a pas de problème de persistance. Je peux par exemple poser plusieurs instances du composant, et leur affecter des listes différentes.

    Le souci survient quand je veux modifier cette liste au run-time. Le code de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            jPetrusRadioButtonsPanel1.setButtonsList(1, "Petrus");
        }                                        
     
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            String[] list = {"aaaaa", "bbbbbb", "cccccc"};
            jPetrusRadioButtonsPanel1.setButtonsList(list);
        }
    Ça fonctionne presque. Le titre de la border du JPanel change immédiatement (c'est pour ça qu'il est mis à buttonsList[0], ce qui hors du contexte de debug n'a aucun sens). Mais le JPanel se vide de tout JRadioButton, sans changer de dimensions. Il faut un resizing pour que les JRadioButton voulus apparaissent, avec ajustement éventuel de la taille du composant.

    Il va sans dire que j'ai essayé des paint(), repaint(), etc. et même des System.gc() dans tous les sens. Mais dans la mesure où le titre change, et les anciens JRadioButton disparaissent ...

    J'ai également tenté des trucs à partir de containerDelegate, en y croyant beaucoup plus. Nada ...

    Une idée ?

    Merci d'avance,

    Pierre

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    comme tu n'as pas eu de réponses ... (euh désolé je ne t'en donnerai pas non plus )

    tu devrais peut etre aller voir sur le forum GUI ... ils seraient peut etre plus inspirés ...

  3. #3
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Merci.

    Je m'étais posé effectivement la question du bon forum. Mais je n'avais pas vu de forum GUI, je viens seulement de le trouver en sous-forum de "Général Java". Et je ne voulais pas spécifier le problème à NetBeans.

    J'ai eu la solution (sur fr.comp.lang.java). C'est revalidate() ...

    Bonne journée.

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

Discussions similaires

  1. Run-time error '5':
    Par zazaraignée dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/01/2006, 13h53
  2. Migration Access 97 vers SQL Server + Access Run Time
    Par KiDiBoo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/10/2005, 09h05
  3. [Composant] Affichage d'un horloge
    Par etiennegaloup dans le forum Composants
    Réponses: 6
    Dernier message: 10/09/2005, 21h53
  4. problème java run time environment
    Par abrmed dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 19/08/2005, 13h27
  5. [DB2] Affichage type TIME
    Par christie dans le forum DB2
    Réponses: 2
    Dernier message: 10/06/2004, 11h35

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