swing, pbm setVisible et affichage

swing, pbm setVisible et affichage - Java - Programmation

Marsh Posté le 31-05-2005 à 17:55:29    

Bonjour,
 
je fais une petite appli, dont voici le panneau de chargement.
Elle détail l'avancement du chargement,
et un bouton permet d'afficher/cacher, les logs (cachés par défaut).
Ceux ci sont affichés dans un JTextArea contenu dans un JScrollPane que je cache.
 
Mais lorsque j'appuie sur le bouton, rien ne se passe, tant que la fenetre n'a pas été retaillée au moins une fois apres que j'ai cliqué sur le bouton.
 
Manifestement quelquechose ne se mets pas à jour et je me perds un peu dans les paint / repaint.
 
Auriez vous une solution ?
merci d'avance.
 

Code :
  1. package panels;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. public class Loader extends JPanel {
  6.     private JToggleButton expand = new JToggleButton("Plus d'infos" );
  7.     private JLabel infos = new JLabel();
  8.     private JLabel label1 = new JLabel("D\u00e9marrage" );
  9.     private JLabel label2 = new JLabel("Veuillez patienter pendant que l'application xxx d\u00e9marre" );
  10.     private JScrollPane scrollPane = new JScrollPane();
  11.     private JTextArea logs = new JTextArea();
  12.     private JProgressBar progress = new JProgressBar(0, 4);
  13.     public Loader() {
  14.         initComponents();
  15.     }
  16.    
  17.     private void expandActionPerformed() {
  18.         scrollPane.setVisible(expand.isSelected());
  19.         // ?
  20.     }
  21.    
  22.     private void initComponents() {
  23.         GridBagConstraints gridBagConstraints = new GridBagConstraints();;
  24.         setLayout(new java.awt.GridBagLayout());
  25.         scrollPane.setViewportView(logs);
  26.         scrollPane.setVisible(false);
  27.         logs.setEditable(false);
  28.         logs.setRows(8);
  29.         logs.setColumns(40);
  30.         label1.setFont(label1.getFont().deriveFont(Font.BOLD));
  31.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  32.         gridBagConstraints.anchor = GridBagConstraints.WEST;
  33.         add(label1, gridBagConstraints);
  34.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  35.         gridBagConstraints.anchor = GridBagConstraints.WEST;
  36.         add(label2, gridBagConstraints);
  37.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  38.         gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
  39.         add(progress, gridBagConstraints);
  40.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  41.         gridBagConstraints.anchor = GridBagConstraints.WEST;
  42.         gridBagConstraints.fill = GridBagConstraints.NONE;
  43.         add(infos, gridBagConstraints);
  44.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  45.         gridBagConstraints.anchor = GridBagConstraints.EAST;
  46.         add(expand, gridBagConstraints);
  47.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  48.         gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
  49.         add(scrollPane, gridBagConstraints);
  50.        
  51.         expand.addActionListener(new ActionListener() {
  52.             public void actionPerformed(ActionEvent ae) {
  53.                 expandActionPerformed();
  54.             }
  55.         });
  56.     }
  57. }

Reply

Marsh Posté le 31-05-2005 à 17:55:29   

Reply

Marsh Posté le 31-05-2005 à 18:50:39    

stb a écrit :

Bonjour,
 
je fais une petite appli, dont voici le panneau de chargement.
Elle détail l'avancement du chargement,
et un bouton permet d'afficher/cacher, les logs (cachés par défaut).
Ceux ci sont affichés dans un JTextArea contenu dans un JScrollPane que je cache.
 
Mais lorsque j'appuie sur le bouton, rien ne se passe, tant que la fenetre n'a pas été retaillée au moins une fois apres que j'ai cliqué sur le bouton.
 
Manifestement quelquechose ne se mets pas à jour et je me perds un peu dans les paint / repaint.
 
Auriez vous une solution ?
merci d'avance.
 

Code :
  1. package panels;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. public class Loader extends JPanel {
  6.     private JToggleButton expand = new JToggleButton("Plus d'infos" );
  7.     private JLabel infos = new JLabel();
  8.     private JLabel label1 = new JLabel("D\u00e9marrage" );
  9.     private JLabel label2 = new JLabel("Veuillez patienter pendant que l'application xxx d\u00e9marre" );
  10.     private JScrollPane scrollPane = new JScrollPane();
  11.     private JTextArea logs = new JTextArea();
  12.     private JProgressBar progress = new JProgressBar(0, 4);
  13.     public Loader() {
  14.         initComponents();
  15.     }
  16.    
  17.     private void expandActionPerformed() {
  18.         scrollPane.setVisible(expand.isSelected());
  19.         // ?
  20.     }
  21.    
  22.     private void initComponents() {
  23.         GridBagConstraints gridBagConstraints = new GridBagConstraints();;
  24.         setLayout(new java.awt.GridBagLayout());
  25.         scrollPane.setViewportView(logs);
  26.         scrollPane.setVisible(false);
  27.         logs.setEditable(false);
  28.         logs.setRows(8);
  29.         logs.setColumns(40);
  30.         label1.setFont(label1.getFont().deriveFont(Font.BOLD));
  31.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  32.         gridBagConstraints.anchor = GridBagConstraints.WEST;
  33.         add(label1, gridBagConstraints);
  34.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  35.         gridBagConstraints.anchor = GridBagConstraints.WEST;
  36.         add(label2, gridBagConstraints);
  37.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  38.         gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
  39.         add(progress, gridBagConstraints);
  40.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  41.         gridBagConstraints.anchor = GridBagConstraints.WEST;
  42.         gridBagConstraints.fill = GridBagConstraints.NONE;
  43.         add(infos, gridBagConstraints);
  44.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  45.         gridBagConstraints.anchor = GridBagConstraints.EAST;
  46.         add(expand, gridBagConstraints);
  47.         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
  48.         gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
  49.         add(scrollPane, gridBagConstraints);
  50.        
  51.         expand.addActionListener(new ActionListener() {
  52.             public void actionPerformed(ActionEvent ae) {
  53.                 expandActionPerformed();
  54.             }
  55.         });
  56.     }
  57. }



 
 
essaie d'appeler la méthode

Code :
  1. repaint();

aà la fin de ta méthode

Code :
  1. initComponent()

pour voir
Je n'ai pas tester pour te dire si ça marche ou pas mais ça ne devrait pas etre loin de ça...
 


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein
Reply

Marsh Posté le 01-06-2005 à 08:55:00    

pour quoi tu fais pas directement un setVisible sur ton JTextArea ?

Reply

Marsh Posté le 01-06-2005 à 09:56:28    

axk47 a écrit :

essaie d'appeler la méthode

Code :
  1. repaint();

aà la fin de ta méthode

Code :
  1. initComponent()

pour voir
Je n'ai pas tester pour te dire si ça marche ou pas mais ça ne devrait pas etre loin de ça...


personellement je doute car rien n'est visible au moment où tu l'appellerais.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 01-06-2005 à 10:33:24    

ca marche si tu rajoutes un this.revalidate(); dans expandActionPerformed()
et ca marche aussi (et le rendu me semble mieux) si tu affiches/caches ton textarea

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed