使用WindowBuilder为日食重叠JPanels

时间:2011-12-21 18:05:20

标签: java eclipse swing windowbuilder cardlayout

我正在使用WindowBuilder Pro进行日食,我希望有两个相互完全重叠的Jpanel。然后,我可以根据选择的combox框切换它们的可见性。当我尝试在gui构建器中实现这一点时,第一个面板被第二个面板取代。还有建议吗?

3 个答案:

答案 0 :(得分: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);

然后添加一个带有ActionPerformed方法的jCheckBox,其中包含:

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的{​​{1}}。

编辑:删除了拥有自己" Jpanel的必要性。情况并非如此,上述方法可以让您获得GroupLayout和CardLayout的好处。

答案 1 :(得分:3)

  

我希望有两个相互完全重叠的Jpanel。然后,我可以根据选择的一个combox框来切换他们的可见性

请参阅:How to Use Card Layout以获取完全相同的示例。

答案 2 :(得分:0)

  

我希望有两个相互完全重叠的Jpanel。

我相信CardLayout正是出于这个原因。

基本上,您可以使用CardLayout嵌套不同的面板或“卡片”,并设置相应的卡以编程方式显示(在某些事件中)。