如何在Java中堆叠/覆盖jPanel?

Pac*_*cha 4 java user-interface swing

我是Java的GUI编程的新手,我做了很多研究,但我找不到这个问题的答案.

我有一个简单JFrame的菜单,在里面JFrame我有一个JPanel登录表单(用户输入他们的用户名和密码),然后我想根据用户想要做的更改JPanel为另一个JPanel.

这样做的最佳方式是什么?我认为堆叠JPanels是可以的.但是在我添加新JLayeredPanels的Netbeans后,他们不会堆叠.我在某处读到了我应该使用Z排序或类似的东西,但我在设计师视图中找不到它.

好的,非常感谢你的耐心等待!

Juv*_*nis 8

CardLayoutclass有一个有用的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);
    }
}
Run Code Online (Sandbox Code Playgroud)