2011-12-21 40 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

相关问题