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 :

[JButton] Problème d'affichage/rafraîchissement


Sujet :

Composants Java

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut [JButton] Problème d'affichage/rafraîchissement
    Bonjour à tous !

    voilà mon soucis :
    Dans un JPanel, j'ai 5 JButton différents : ajout, suppression, édition, valider et annuler, ainsi qu'un JTextfield.
    Dans un autre j'ai un JList.
    Au départ, il n'y a que les 3 premiers qui sont visibles (cf. 1e pièce jointe) et lorsque l'on va cliquer sur ajouter, ou éditer, ces 3 JButton vont disparaître pour laisser la place aux 2 autres (cf. 2e pièce jointe). Il sont donc au même endroit (dans le layout) et voici comment ils sont construits :
    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
    JPanel pnlDTravaux = new JPanel();
     
    pnlDTravaux.setLayout(new GridBagLayout());
     
    gbc.gridheight = 1;//gbc est de type GridBagConstraints
    gbc.gridwidth = 3;
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.insets = new Insets(2, 2, 3, 2);
     
    JPanel pnlBtn13 = new JPanel();
    pnlBtn13.setLayout(new GridLayout(1, 3, 5, 0));
     
    pnlBtn13.add(btnPlusTravaux);
    btnPlusTravaux.setToolTipText("Ajouter un nouveau type de travaux");
    pnlBtn13.add(btnMoinsTravaux);
    btnMoinsTravaux.setToolTipText("Supprimer le type de travaux sélectionné");
    pnlBtn13.add(btnEditTravaux);
    btnEditTravaux.setToolTipText("Modifier les informations");
     
    pnlDTravaux.add(pnlBtn13, gbc);
     
    JPanel pnlBtn23 = new JPanel();
    pnlBtn23.setLayout(new GridLayout(1, 3, 5, 0));
     
    pnlBtn23.add(btnValTravaux);
    pnlBtn23.add(btnAnnTravaux);
     
    btnValTravaux.setVisible(false);
    btnAnnTravaux.setVisible(false);
     
    pnlDTravaux.add(pnlBtn23, gbc);
     
    gbc.gridy++;
     
    pnlDTravaux.add(new JLabel("Type de travaux"), gbc);
     
    gbc.gridy++;
     
    pnlDTravaux.add(tfTravaux, gbc);
     
    pnlTravaux.add(pnlDTravaux, BorderLayout.CENTER);
    les listener sont ajoutés plus loin dans le code, pas de problème là-dessus, les actions s'effectuent :
    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
    		if(btn == btnPlusTravaux)
    		{
    			edtTravaux = false;//boolean indiquant si on est en mode édition (après clic btnEditionTravaux) ou dans le cas d'un nouveau type de travaux
    			tfTravaux.setText("");
    			listTravaux.setEnabled(false);
    			passerModeEdition(tfTravaux, true, btnPlusTravaux, btnMoinsTravaux, btnEditTravaux, btnValTravaux, btnAnnTravaux);
    		}
    		else if(btn == btnMoinsTravaux)
    		{
    			alTravaux.remove(listTravaux.getSelectedIndex());
    			String[] tabTravaux = new String[alTravaux.size()];
    			for(int u = 0 ; u < tabTravaux.length ; u++)
    				tabTravaux[u] = alTravaux.get(u).getTravaux();
    			listTravaux = new JList(tabTravaux);
    			listTravaux.updateUI();
    			listTravaux.repaint();
    		}
    		else if(btn == btnEditTravaux)
    		{
    			edtTravaux = true;
    			listTravaux.setEnabled(false);
    			passerModeEdition(tfTravaux, true, btnPlusTravaux, btnMoinsTravaux, btnEditTravaux, btnValTravaux, btnAnnTravaux);
    		}
    		else if(btn == btnValTravaux)
    		{
    			if(!tfTravaux.getText().trim().equals(""))
    			{
    				if(edtTravaux)
    					alTravaux.set(listTravaux.getSelectedIndex(), new Travaux(tfTravaux.getText()));
    				else
    					alTravaux.add(new Travaux(tfTravaux.getText()));
    				String[] tabTravaux = new String[alTravaux.size()];
    				for(int u = 0 ; u < tabTravaux.length ; u++)
    					tabTravaux[u] = alTravaux.get(u).getTravaux();
    				listTravaux = new JList(tabTravaux);
    				listTravaux.updateUI();
    				listTravaux.repaint();
    				edtTravaux = false;
    				passerModeEdition(tfTravaux, false, btnPlusTravaux, btnMoinsTravaux, btnEditTravaux, btnValTravaux, btnAnnTravaux);
    				listTravaux.setEnabled(true);
    			}
    			else
    			{
    				//TODO JOptionPane blabla pas de type vide...
    			}
    		}
    		else if(btn == btnAnnTravaux)
    		{
    			edtTravaux = false;
    			passerModeEdition(tfTravaux, false, btnPlusTravaux, btnMoinsTravaux, btnEditTravaux, btnValTravaux, btnAnnTravaux);
    			listTravaux.setEnabled(true);
    		}
    Je sais que c'est code n'est pas hyper hyper propre mais pour l'instant, je vais déjà essayer de le faire fonctionner "graphiquement", je verrai plus tard pour le rendre plus propre...

    La méthode passerModeEdition() sert à ... bin passer ou non en mode édition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void passerModeEdition(JTextField tf, boolean edition, JButton btnAjout, JButton btnSup, JButton BtnEdit, JButton btnVal, JButton btnAnn) {
    	tf.setEditable(edition);
    	btnAjout.setVisible(!edition);
    	btnSup.setVisible(!edition);
    	BtnEdit.setVisible(!edition);
    	btnVal.setVisible(edition);
    	btnAnn.setVisible(edition);
    	btnAjout.repaint();
    	btnSup.repaint();
    	BtnEdit.repaint();
    	btnVal.repaint();
    	btnAnn.repaint();
    }
    Et je pense que c'est justement ici que ça foire... j'ai essayé repaint, validate, revalidate, et même updateUI, sur les composants, et sur les containers de ces composants et pourtant une erreur subsiste. En fait le changement se fait correctement, mais les JButton ne s'affichent pas : il faut que je passe la souris par dessus pour qu'il apparaisse. Ce qui n'est pas très pratique, je vous l'accorde...

    Quelqu'un pourrait-il m'aider siouplaît ?

    Merci d'avance
    Images attachées Images attachées   

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/10/2014, 11h22
  2. Problème d'affichage JTextField/JButton
    Par Nat_33 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 16/10/2012, 20h12
  3. Problème d'affichage JTextField/JButton
    Par Nat_33 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 16/10/2012, 19h03
  4. Réponses: 1
    Dernier message: 06/03/2003, 12h57
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 10h43

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