[Swing] : probleme avec JScrollPane sur JPanel

dinfree Messages postés 1 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 22 juillet 2007 - 22 juil. 2007 à 18:08
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 24 juil. 2007 à 02:04
Bonjour à tous,


Un truc tout bête messieurs dames mais j'ai un probleme pour faire apparaitre un "scroll" sur un JPanel.



La structure de mon IHM est la suivante :


- Une "JFrame"
- Un "JPanel" panelPrincipal
- Un "JPanel" panelGauche
- Un "JPanel" panelDroit



Remarque : Je met le Jpanel "Gauche" et le Jpanel "Droit" dans le Jpanel "principal".


J'affiche bien les deux JPanel Gauche et Droit mais lorsque les composants du panel Droit sont trop nombreux(lorsque l'on clic sur "creer un nouveau formulaire", le scroll ne se met pas en place ...



Infos suplémentaires :


- Le JScrollPane marche bien sur un seul JPanel. c'est a dire quand la JFrame ne contient qu'un seul JPanel.


- Lors de mes traitements sur le JPanel panelDroit, je fait un "panelDroit.removeAll();" pour vider tous le JPanel "Droit" et ajouter de nouveaux JComponent(Voir l'actionPerformed). Je ne sais pas si cele a une incidence?




Merci d'avance pour votre aide.



MON CODE :


// Mon objet courant est la JFrame ...
// Ici seul le bouton "butt_nouveau" fonctionne. (Si des fois vous voudriez essayer l'IHM)


package vue;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.util.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
import modele.*;


public class testPanel extends JFrame implements ActionListener{
 
 private static final long serialVersionUID = 0;
 
 public JPanel panelPrincipal   = null;
 public JPanel panelDroit       = null;
 public JPanel panelGauche      = null;
 public JPanel panelDescription = null;
 
 JScrollPane pr,Droit              = null;
 
 private JButton butt_nouveau       = null;
 private JButton butt_ouvrir        = null;
 private JButton butt_enregistrer   = null;
 private JButton butt_search        = null;
 private JButton butt_recherche    = null;
 private JButton butt_editer     = null;
 private JButton butt_supprimer     = null;
 private JButton butt_export        = null;
 private JButton butt_drop          = null;
 private JButton butt_quitter       = null;
 private JButton saisir_nouveau     = null;
 private JButton saisir_existant    = null;
 
 /**
  *  Le constructeur de la classe IHM permet de générer une JFrame
  *  avec un layout de type GridBagLayout
  */
 public testPanel(){
  super();
  
  build();//On initialise notre fenêtre
 }
 
 /**
  *  La méthode permet de construire l'IHM avec tous ces éléments associés
  */
 private void build(){
  
  this.setTitle("  Editeur de formulaire pour les CIP"); //On donne un titre à l'application
  this.setSize(800,600); //On donne une taille à notre fenêtre
  this.setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
  this.setResizable(true) ; //On autorise la redimensionnement de la fenêtre
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
  
        panelPrincipal = new JPanel();
        panelPrincipal.setPreferredSize(new Dimension(780, 580));


        panelGauche = new JPanel();
        panelGauche.setPreferredSize(new Dimension(300, 560));
        panelGauche.setBorder(new LineBorder(new Color(0,0,0)));
       
        panelDroit = new JPanel();
        panelDroit.setPreferredSize(new Dimension(450, 560));
        panelDroit.setBorder(new LineBorder(new Color(0,0,0)));
       
        JTextArea descr = new JTextArea();
        descr.setText("Affichage du composant JTextArea reussi");
       
        panelDescription = new JPanel(new GridBagLayout());
        panelDescription.setBorder(BorderFactory.createTitledBorder("Description"));
        panelDescription.setPreferredSize(new Dimension(450, 200));
        panelDescription.add(descr);
          
  /*
   *****************************************************
   *    Création des boutons du panel    *          *
   *****************************************************
   */
  
  butt_nouveau = new JButton();
  butt_nouveau.setText("Creer un formulaire");
  
  butt_nouveau.addActionListener(this);
  this.addComposantMain(panelGauche, butt_nouveau); 
  
  butt_ouvrir = new JButton();
  butt_ouvrir.setText("Ouvrir un formulaire");
  
  butt_ouvrir.addActionListener(this);
  this.addComposantMain(panelGauche, butt_ouvrir);
  
  butt_search = new JButton();
  butt_search.setText("Chercher un formulaire");
  
  butt_search.addActionListener(this);
  this.addComposantMain(panelGauche, butt_search);
  
  butt_supprimer = new JButton();
  butt_supprimer.setText("Supprimer un formulaire");
  butt_supprimer.addActionListener(this);
  this.addComposantMain(panelGauche, butt_supprimer);
  
  butt_export = new JButton();
  butt_export.setText("Exporter les formulaires vers une cle USB");
  //butt_export.setBackground( new Color(255,255,0));
  butt_export.addActionListener(this);
  this.addComposantMain(panelGauche, butt_export);
  
  butt_quitter = new JButton();
  butt_quitter.setText("Quitter l'application");
  //butt_quitter.setBackground( new Color(255,255,0));
  butt_quitter.addActionListener(this);
  this.addComposantMain(panelGauche, butt_quitter);
  
  saisir_nouveau = new JButton("Remplir formulaire");
  saisir_nouveau.addActionListener(this);
  
  saisir_existant = new JButton("Modifier formulaire");
  saisir_existant.addActionListener(this);
  
  butt_enregistrer = new JButton("Enregistrer formulaire");
  butt_enregistrer.addActionListener(this);
  
  butt_recherche = new JButton("Rechercher");
  butt_recherche.addActionListener(this);
  
  butt_editer = new JButton("Editer le formulaire");
  butt_editer.addActionListener(this);
  
  butt_drop = new JButton("Supprimer le formulaire");
  butt_drop.addActionListener(this);
  
  /******************************
   * MON PROBLEME EST CI-DESSOUS
   ******************************/
  panelPrincipal.add(panelGauche);
  panelDroit.add(panelDescription);
  Droit = new JScrollPane(panelDroit);
  panelPrincipal.add(Droit);
  
  this.add(panelPrincipal);
  
        pack();
        setVisible(true); // Affichage de l'IHM
        repaint();
 }


 public void addForm(JPanel panel, String text, JComponent component){
  
  JLabel label=new JLabel(text);
  GridBagConstraints gbc=new GridBagConstraints();
  gbc.gridwidth=1;
  gbc.insets=new Insets(3,8,3,8); // Définition des espaces entre chaques JComponent
  gbc.anchor=GridBagConstraints.LINE_START; // Le JComponent commencera au début de la ligne
  panel.add(label,gbc); // ajout du JLabel dans le JPanel
  gbc.anchor=GridBagConstraints.LINE_END; // Le JComponent finira à la fin de la ligne
  gbc.gridwidth=GridBagConstraints.REMAINDER; // On se souvient de l'emplacement du dernier élément
  gbc.fill=GridBagConstraints.HORIZONTAL; // Grille horizontal
  gbc.weightx=1.0;
  panel.add(component,gbc); // Ajout du JComponent dans le JPanel
 }


 public void actionPerformed(ActionEvent e) {
  if(e.getSource() == butt_nouveau){
   
   this.panelDroit.removeAll();
   
   
   for(int i = 0; i < 100; i++){
    addForm(panelDroit, "truc", new JTextField(25));  
   }
   
   setVisible(true);
   repaint();
  }
  if (e.getSource() == butt_quitter){
   System.exit(0);
  }
 }
 
 public static void main(String[] args) throws IOException {


  // MainPanelOk ihm = new MainPanelOk();
  // MainPanel ihm = new MainPanel();
   testPanel test = new testPanel();


 }
 
}

1 réponse

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
24 juil. 2007 à 02:04
  panelPrincipal.add(panelGauche);
  panelDroit.add(panelDescription);
  Droit = new JScrollPane(panelDroit);
  panelPrincipal.add(Droit);
  
  this.add(panelPrincipal);
  
        pack();
        setVisible(true); // Affichage de l'IHM
        repaint();

cette partie de ton code c est du n import quoi ...
si rien ne fonctionne normalement c est normal...
Bien que n ayant pas bien compri l effet que tu veux rendre il est évident qu il te faut assimiler la notion de Layout avant tout... ;o) nulle part tu ne defini ton layout : setLayout( ... )
ensuite sur le JScroll aussi plusieurs chose t echape ;o) ...
il contiend une notion de viewport qu il faut donc lui donner pour qu il soit utile.... ;o) l utilisation la plus simple etant de la lui donner à la construction : new JScrollPane( tonJPanel );

ensuite un repaint derriere un pack est completement superflu .. de meme le setvisible je l aurai plutot positionné dans le Main  ;o)

GodConan ;o)
0
Rejoignez-nous