2011-12-21 79 views
2

我正在使用WindowBuilder Pro進行eclipse,並且我希望有兩個完全相互重疊的Jpanel。然後,我可以根據選擇的combox框切換其可見性。當我嘗試在gui builder中實現這個目標時,第一個面板被第二個面板取代。並請諮詢?使用WindowBuilder for eclipse重疊JPanels

+0

您使用的是什麼佈局管理器? – Sheriff 2011-12-21 18:12:21

+0

@Sheriff - GroupLayout – pingu 2011-12-21 18:15:05

+0

+1因爲我不知道你可以這樣做,直到我研究了我的答案。 – Sheriff 2011-12-21 19:03:55

回答

3

我想有兩個完美重疊的Jpanels。然後,我可以基於選擇的combox框切換其可見性

請參閱:How to Use Card Layout一個示例,完全是這樣。

4

根據tutorial,有可能使用groupLayout

您必須做的是將組件添加到母親JPanel,並將該面板設置爲使用GroupLayout

然後在水平和垂直間距中將組件添加到佈局中作爲ParallelGroup。這意味着它們將佔用相同的X和Y空間。然後根據需要禁用/啓用,並隱藏JPanel。

我相信它會的工作方式是這樣:

 JPanel panel1, panel2, panel3; 
     //initialize panel3, etc 
     panel1=new JPanel(); 
     panel2 = new JPanel(); 
     panel1.add(new JTextField("Panel1")); 
     panel2.add(new JTextField("PANEL2")); 

     groupLayout = new GroupLayout(panel3); 

     panel3.setLayout(groupLayout); 

     groupLayout.setHorizontalGroup(
     groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING) 
      .addComponent(panel1) 
      .addComponent(panel2) 
     ); 
     groupLayout.setVerticalGroup(
      groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING) 
      .addComponent(panel1) 
      .addComponent(panel2) 
     ); 
     panel1.setEnabled(false); 
     panel1.setVisible(false); 

然後添加一個JCheckBox的用含有ActionPerformed方法:

if(panel1.isEnabled()) { 
    panel1.setEnabled(false); 
    panel1.setVisible(false); 
    panel2.setEnabled(true); 
    panel2.setVisible(true); 

}else 
if(panel2.isEnabled()) { 
    panel2.setEnabled(false); 
    panel2.setVisible(false); 
    panel1.setEnabled(true); 
    panel1.setVisible(true); 

} 

這產生了預期的行爲我。你應該能夠很容易地將JComboBox換成JCheckBox

編輯:刪除了「自己的Jpanel」的必要性。情況並非如此,上述方法可讓您獲得GroupLayout和CardLayout的好處。

+1

爲什麼要重新發明輪子。 CardLayout是爲此目的而設計的。 – camickr 2011-12-22 01:15:28

+0

感謝這位警長,這個問題是,它很難在視覺上設計你的形式,除非我做錯了。 – pingu 2011-12-22 09:43:23

+1

@平谷無後顧之憂。卡布局似乎是你在找什麼。我可以看到一些情況,這將是首選方法,但總體卡片佈局是爲此設計的。 – Sheriff 2011-12-22 14:05:19

0

我想有兩個完美重疊的Jpanels。

我相信CardLayout就是因爲這個原因。

基本上,您可以使用CardLayout嵌套不同的面板或「卡片」,並設置適當的卡片以編程方式顯示(某些事件)。

+0

-1這個答案是在30分鐘前給出的。沒有必要混淆與重複的答案論壇。 – camickr 2011-12-22 01:17:03