2012-01-16 45 views
1

我的项目有点麻烦。如何让一个类中的按钮设置其他类中其他面板的可见性?

我有一个类是一个面板显示4个按钮。

我有4个类(至今只有一个),它们是显示各种组件的面板。这些面板将占据一个空间,并且一次只能看到一个面板。

我想要做的是使用各自的按钮来控制面板的可见性。 例如,当用户点击button1时,应该出现panel1,并且按下button2时,出现panel2等。

这是我第一次在java中使用GUI,并且有任何帮助。

回答

6

这些都是选择你,(在顺序我猜最适合你的考虑)之前

  1. CardLayout

    一个CardLayout对象是一个布局管理器为一个容器。它将容器中的每个组件视为卡片。一次只能看到一张卡片,容器就像一叠卡片一样。

    更多信息见How to Use CardLayout

  2. JTabbedPane

    ,通过点击标签上与给定的标题和/或图标

    允许的一组部件之间的用户开关A组分

    更多信息,请参阅How to Use Tabbed Panes

  3. JDialog(也许未修饰的一个)

    更多信息请参见How to Make Dialogs

1

与其他的答案,在最近的GUI我创造我用CardLayout来完成这项任务。

解决方法很简单,在你父的JFrame一个面板,将持有的CardLayout,当你添加要告诉你一个字符串与它关联的每个面板,以便您可以抓住它后,如:

panelManager.add(typeSelectionView, TYPEVIEW); 

其中panelManager是包含我的布局的我的JPanel(在此之前您必须添加,因此您可以使用此add()方法。

确保您存储这些字符串,其识别某种形式的隐藏面板,因为我在这里与我最后的变量,当谈到时间来显示这个面板,其被布局内隐藏只需拨打:

cl.show(panelManager, newPanel); 

在我的情况下,newPanel由控制器计算并传递给视图。它使用视图类中的最终静态字符串。

0

虽然已经建议CardLayout,甚至已经提供了Swing教程的链接,但我会添加一些示例代码,它使用CardLayout作为答案。

public class CardLayoutDemo { 

    private static JFrame createGUI(){ 

    JFrame testFrame = new JFrame(); 
    testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    List<String> layoutConstraints = Arrays.asList("first", "second", "third"); 

    final JPanel contentsPane = new JPanel(); 
    final CardLayout cardLayout = new CardLayout(); 
    contentsPane.setLayout(cardLayout); 

    //listener which will be used to switch between the different layouts 
    ActionListener listener = new ActionListener() { 
     public void actionPerformed(ActionEvent aActionEvent) { 
     String constraint = aActionEvent.getActionCommand(); 
     cardLayout.show(contentsPane, constraint); 
     } 
    }; 

    //add components to card layout with specific constraint 
    for (String constraints : layoutConstraints) { 
     contentsPane.add(new JLabel(constraints), constraints); 
    } 

    //create buttons allowing to switch between the different layouts 
    JPanel buttonPanel = new JPanel(); 
    for (int i = 0; i < layoutConstraints.size(); i++) { 
     String constraint = layoutConstraints.get(i); 
     JButton button = new JButton("Layout " + i); 
     button.setActionCommand(constraint); 
     button.addActionListener(listener); 
     buttonPanel.add(button); 
    } 

    testFrame.add(contentsPane, BorderLayout.CENTER); 
    testFrame.add(buttonPanel, BorderLayout.SOUTH); 

    return testFrame; 
    } 

    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
     JFrame frame = createGUI(); 
     frame.pack(); 
     frame.setVisible(true); 
     } 
    }); 
    } 
} 
相关问题