【问题标题】:Switching JPanel within JApplet在 JApplet 中切换 JPanel
【发布时间】:2012-10-23 19:21:46
【问题描述】:

问题来了。我有一个 JApplet,在 applet 内我有两个 JPanel,panel1 和 panel2。每个面板都有一个显示为“panel1”或“panel2”的标签,每个面板都有一个名为“switch”的按钮。当我运行小程序时,我只希望 panel1 可见。当我单击切换按钮时,我希望 panel1 不可见(或消失),而 panel2 可见。我还想单击 panel2 中的切换按钮以切换回 panel1。谁能帮我解决这个问题?

public class MyApplet extends JApplet
{
    private Panel1 panel1;
    private Panel2 panel2;

    public void init()
    {
        setLayout(new FlowLayout());

        panel1 = new Panel1();
        panel2 = new Panel2();

        add(panel1);
        //add(panel2);
    }
}

public class Panel1 extends JPanel
{
    private JLabel label;
    private JButton button;

    public Panel1()
    {
        setLayout(new FlowLayout());

        label = new JLabel("Panel1");
        button = new JButton("Switch1");

        add(label);
        add(button);
    }
}

public class Panel2 extends JPanel
{
    private JLabel label;
    private JButton button;

    public Panel2()
    {
        setLayout(new FlowLayout());

        label = new JLabel("Panel2");
        button = new JButton("Switch2");

        add(label);
        add(button);
    }
}

【问题讨论】:

    标签: java event-handling jpanel japplet


    【解决方案1】:

    向小程序添加“内容”,您希望在其中切换面板。

    将此面板布局管理器设置为CardLayout

    将您的其他面板添加到“内容”窗格

    content.add(aPanel, "PanelA");
    content.add(bPanel, "PanelB");
    

    使用 CardLayout API 切换面板...

    cardLayout.show(content, "PanelB");
    

    阅读How to Use CardLayout了解更多详情

    【讨论】:

    • 谢谢,但是没有卡片布局有没有办法做到这一点?
    • "..没有卡片布局有没有办法做到这一点?" 有什么理由使用CardLayout吗?在这些情况下,将“为什么”添加到“什么”中总是很方便的。
    【解决方案2】:

    将它们都添加到小程序中,并在其中一个上设置可见(false)。

    为按钮添加监听器。

    监听器将切换相应面板的 setVisible。

    【讨论】:

    • 问题是按钮在面板里面。我可以将面板本身设置为不可见,但是如何将另一个面板设置为可见?
    • 参见上面的 CardLayout。面板像卡片一样堆叠在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多