我的项目有点麻烦。如何让一个类中的按钮设置其他类中其他面板的可见性?
我有一个类是一个面板显示4个按钮。
我有4个类(至今只有一个),它们是显示各种组件的面板。这些面板将占据一个空间,并且一次只能看到一个面板。
我想要做的是使用各自的按钮来控制面板的可见性。 例如,当用户点击button1时,应该出现panel1,并且按下button2时,出现panel2等。
这是我第一次在java中使用GUI,并且有任何帮助。
我的项目有点麻烦。如何让一个类中的按钮设置其他类中其他面板的可见性?
我有一个类是一个面板显示4个按钮。
我有4个类(至今只有一个),它们是显示各种组件的面板。这些面板将占据一个空间,并且一次只能看到一个面板。
我想要做的是使用各自的按钮来控制面板的可见性。 例如,当用户点击button1时,应该出现panel1,并且按下button2时,出现panel2等。
这是我第一次在java中使用GUI,并且有任何帮助。
CardLayout是您的要求的最佳选择。
http://www.java2s.com/Code/Java/Swing-JFC/CardLayoutDemo.htm
这些都是选择你,(在顺序我猜最适合你的考虑)之前
一个CardLayout对象是一个布局管理器为一个容器。它将容器中的每个组件视为卡片。一次只能看到一张卡片,容器就像一叠卡片一样。
,通过点击标签上与给定的标题和/或图标
允许的一组部件之间的用户开关A组分
更多信息,请参阅How to Use Tabbed Panes
JDialog(也许未修饰的一个)
更多信息请参见How to Make Dialogs
与其他的答案,在最近的GUI我创造我用CardLayout来完成这项任务。
解决方法很简单,在你父的JFrame一个面板,将持有的CardLayout,当你添加要告诉你一个字符串与它关联的每个面板,以便您可以抓住它后,如:
panelManager.add(typeSelectionView, TYPEVIEW);
其中panelManager是包含我的布局的我的JPanel(在此之前您必须添加,因此您可以使用此add()方法。
确保您存储这些字符串,其识别某种形式的隐藏面板,因为我在这里与我最后的变量,当谈到时间来显示这个面板,其被布局内隐藏只需拨打:
cl.show(panelManager, newPanel);
在我的情况下,newPanel由控制器计算并传递给视图。它使用视图类中的最终静态字符串。
虽然已经建议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);
}
});
}
}