2012-05-05 145 views
2

我有以下JFrame。無法在JFrame中添加多個JPanel,

public class AddActivityWindow extends JFrame { 

    //declaration of components go here 
    ... 
    public AddActivityWindow(ActivityStore store) { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel pnl_date = new JPanel(); 
     JLabel lbl_date = new JLabel("X"); 
     pnl_date.add(lbl_date); 
     add(pnl_date); 


     pnl_activities = new JPanel(); 
     JLabel lbl_act = new JLabel("Y"); 
     pnl_activities.add(lbl_act); 
     add(pnl_activities); 

     setLocationRelativeTo(null); 
     setVisible(true); 

    } 
} 

當我創建這個框架時,我期待它會創建一個有兩個面板的框架。但是,我只看到第二個面板(即),我只在屏幕上看到Y,而不是X。但是,如果我刪除了第二個面板的代碼,那麼我可以看到X

當我添加第二個面板時會發生什麼。爲什麼第一個面板不出現在框架中?

+3

使用上的JFrame一些'layout'添加到面板之前,否則他們肯定會相互重疊.. – Asif

回答

6

您應該使用不同的佈局管理器,看看:A Visual Guide to Layout Managers爲您選擇一個。

這工作對我很好,

import java.awt.FlowLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class FrameTest extends JFrame { 

    public FrameTest() { 
     setLayout(new FlowLayout()); 
     setSize(150, 150); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel pnl_date = new JPanel(); 
     JLabel lbl_date = new JLabel("X"); 
     pnl_date.add(lbl_date); 
     add(pnl_date); 


     JPanel pnl_activities = new JPanel(); 
     JLabel lbl_act = new JLabel("Y"); 
     pnl_activities.add(lbl_act); 
     add(pnl_activities); 

     setLocationRelativeTo(null); 
     setVisible(true); 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new FrameTest().setVisible(true); 

      } 
     }); 
    } 
} 
7

JFrame的默認佈局是BorderLayoutBorderLayout的一個特點是它只能在每個區域包含一個組件。如果您僅使用add方法而沒有指定任何約束,則與將組件添加到CENTER相同。所以你的第二個add調用取代了你第一次添加的元素。

可能的解決方案:指定約束條件,e.g

add(pnl_date, BorderLayout.NORTH); 
//... 
add(pnl_activities, BorderLayout.CENTER); 

或切換到另一個佈局管理器(例如BoxLayoutFlowLayout)爲您的JFrame。這取決於你的需求。看看Visual guide to layout managers這是選擇經理的好起點。