ajout de jpanels sur le volet divisé en java


J'essaie d'ajouter trois panneaux sur un seul formulaire JFrame. si je n'ajoute que trois panneaux ils sont affichés mais si j'ajoute le panneau sur le volet divisé rien n'est affiché suggérer l'erreur dans le code suivant

 import javax.swing.*;
 import java.awt.*;
 class paneltest extends JFrame{
 paneltest()
 {
   Container cp=this.getContentPane();
   cp.setLayout(null);
   panel1 p1= new panel1();
   panel2 p2= new panel2();
   panel3 p3= new panel3();
   cp.add(p1);
   cp.add(p2);
   cp.add(p3);
   Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();

   p1.setBounds(0,0,screenSize.width/3,screenSize.height);
   p2.setBounds(screenSize.width/3,0,screenSize.width/3,screenSize.height);
   p3.setBounds(2*(screenSize.width/3),0,screenSize.width/3,screenSize.height); 

   try{

       JSplitPane splitPaneLeft = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
       JSplitPane splitPaneRight = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        splitPaneLeft.setLeftComponent( p1 );
        splitPaneLeft.setRightComponent( p2 );
        splitPaneRight.setLeftComponent( splitPaneLeft );
        splitPaneRight.setRightComponent( p3 );

        JPanel panelSplit = new JPanel();
        panelSplit.add(splitPaneRight);
        cp.add(panelSplit);
       panelSplit.setVisible(true);
       }
    catch(Exception ex)
    {

     JOptionPane.showMessageDialog(null,"exception occured"+ex);   

     }
   }
     public static void main(String arsg[])
    {

       paneltest frm= new paneltest();
       frm.show ();

       }

       }
       class panel1 extends JPanel
        {
        panel1()
           {
           setLayout(new FlowLayout());
           JLabel l1= new JLabel("panel1");
           add(l1);


           }    

           }

         class panel2 extends JPanel
        { 
         panel2()
           {
           setLayout(new FlowLayout());
           JLabel l1= new JLabel("panel2");
          add(l1);

           }    

         }
      class panel3 extends JPanel
       {
       panel3()
        {
          setLayout(new FlowLayout());
          JLabel l1= new JLabel("panel3");
          add(l1);


         }    

        }
Author: Adesh singh, 2012-12-25

1 answers

Supprimer la ligne cp.setLayout(null). Cela permettra de résoudre le problème initial.

Après cela:

  • mettre en retrait le code
  • respecter les conventions de nommage Java
  • n'ajoutez pas de panneaux au volet de contenu si vous les ajoutez aux splitpanes juste après. Un composant peut être ajouté à un parent unique. Cela n'a pas de sens de les ajouter aux deux
  • n'utilisez pas setBounds(). C'est le rôle du gestionnaire de mise en page
  • n'étendez pas JPanel et JFrame. Utilisez-les
  • le Respect Swing du stratégie de threading.
  • Ne pas catch (Exception)
 2
Author: JB Nizet, 2012-12-25 08:59:41