我的项目遇到了一些麻烦。
我有一个类,它是一个显示4个按钮的面板。
我有4个类(目前只有一个)是显示各种组件的面板。这些面板占据一个空间,一次只能看到一个面板。
我想要做的是用各自的按钮控制面板的可见性。 例如,当用户点击button1时,应该出现panel1,当按下button2时,会出现panel2等。
这是我第一次使用java中的GUI,感谢任何帮助。
答案 0 :(得分:6)
这些是您之前的选项,(按照我认为最适合您的顺序给出)
CardLayout对象是容器的布局管理器。它将容器中的每个组件视为卡片。一次只能看到一张卡片,而容器就像一堆卡片一样。
有关详细信息,请参阅How to Use CardLayout
一个组件,允许用户通过单击具有给定标题和/或图标的选项卡在一组组件之间切换
有关详细信息,请参阅How to Use Tabbed Panes
JDialog(也许是未修饰的)
有关详细信息,请参阅How to Make Dialogs
答案 1 :(得分:4)
CardLayout是满足您要求的最佳选择。
http://www.java2s.com/Code/Java/Swing-JFC/CardLayoutDemo.htm
答案 2 :(得分:1)
与其他答案一样,在我最近创建的GUI中,我使用CardLayout来完成此任务。
解决方案很简单,在您的Parent JFrame中有一个面板,它将保存CardLayout,当您添加要显示的每个面板时,您将String与它关联,以便您可以在以后抓取它,例如:
panelManager.add(typeSelectionView, TYPEVIEW);
其中panelManager是包含我的布局的JPanel(在此之前你必须添加它,这样你就可以使用这个add()方法。
确保您存储这些以某种形式识别隐藏面板的字符串,就像我在这里使用我的最终变量一样,当显示隐藏在布局中的此面板时,只需调用:
cl.show(panelManager, newPanel);
在我的情况下,newPanel由控制器计算并传递给视图。它使用视图类中的最终静态字符串。
答案 3 :(得分: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 );
}
} );
}
}