我真的很喜欢Java中的GUI编程,我做了很多研究,但我找不到这个问题的答案。
我有一个带有菜单的简单JFrame
,在JFrame
内,我有一个JPanel
的登录表单(用户输入了他们的用户名和密码),然后我想要将JPanel
更改为另一个JPanel
,具体取决于用户的目标。
这样做的最佳方法是什么?我认为堆叠JPanels
是可以的。但是我在Netbeans中添加新的JLayeredPanels
后,它们不会堆叠。我在某处读到了我应该使用Z排序或类似的东西,但我在设计师的视图中找不到它。
好的,非常感谢你的耐心等待!
答案 0 :(得分:7)
CardLayout
类有一个有用的API,可以满足您的要求。使用next(), first(), last()
等方法会很有帮助。
我已准备好在父面板和/或框架内更改面板的简单演示。
看看它:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PanelChanger implements ActionListener
{
JPanel panels;
public void init(Container pane)
{
JButton switcher = new JButton("Switch Active Panel!");
switcher.addActionListener(this);
JPanel login = new JPanel();
login.setBackground(Color.CYAN);
login.add(new JLabel("Welcome to login panel."));
JPanel another = new JPanel();
another.setBackground(Color.GREEN);
another.add(new JLabel("Yeah, this is another panel."));
panels = new JPanel(new CardLayout());
panels.add(login);
panels.add(another);
pane.add(switcher, BorderLayout.PAGE_START);
pane.add(panels, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent evt)
{
CardLayout layout = (CardLayout)(panels.getLayout());
layout.next(panels);
}
public static void main(String[] args)
{
JFrame frame = new JFrame("CardLayoutDemo");
PanelChanger changer = new PanelChanger();
changer.init(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}
}