2012-12-25 61 views
1

我想在單個JFrame窗體上添加三個面板。如果我只是將它們顯示三面圍板,但如果我加上拆分窗格沒什麼面板顯示 表明,在下面的代碼在java中的分割窗格中添加jpanels

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); 


     }  

     } 
+0

1)該代碼開始在'cp.setLayout(空)下坡充電;!'使用*** ***佈局2)使用代碼塊一致性和邏輯縮進。代碼的縮進旨在幫助人們理解程序流程。 –

回答

2

刪除行cp.setLayout(null)錯誤。這將解決最初的問題。

之後:

  • 縮進代碼
  • 方面的Java命名約定
  • 板,如果你之後將其添加到splitpanes不添加到內容窗格中。一個組件可以被添加到單個父級。將它們添加到
  • 不要使用setBounds()沒有任何意義。這是佈局管理器
  • 不能擴展JPanel和JFrame的角色。使用它們
  • 尊重Swing's threading policy
  • 不要catch (Exception)
+0

因爲我刪除了setLayout(null),也沒有在容器上添加面板,而是顯示面板,但它們不能調整大小。 –

+0

這是因爲'panelSplit'面板使用了FlowLayout(默認)。使其使用BorderLayout,並且Splitpane將佔用所有可用空間。 –