首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CardLayout的问题

CardLayout的问题
EN

Stack Overflow用户
提问于 2014-01-25 02:01:13
回答 1查看 43关注 0票数 0

我正在学习关于YouTube on CardLayout的教程。我下载了原码,结果很好。但是对于我想要做的程序,我需要一个单独的类来运行应用程序(即只使用main方法的单独的类)、JFrame的单独的类以及JPanel的至少一个单独的类。我试着分离代码,但它为我显示了一个空白的JFrame

代码语言:javascript
复制
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

public class CardJPanel extends JPanel
{
    JPanel panelCont = new JPanel();
    JPanel panelFirst = new JPanel();
    JPanel panelSecond = new JPanel();
    JButton buttonOne = new JButton("Switch to second panel");
    JButton buttonSecond = new JButton("Switch to first panel");
    CardLayout cl = new CardLayout();

    public CardJPanel()
    {
        panelCont.setLayout(cl);

        panelFirst.add(buttonOne);
        panelSecond.add(buttonSecond);
        panelFirst.setBackground(Color.BLUE);
        panelSecond.setBackground(Color.GREEN);

        panelCont.add(panelFirst, "1");
        panelCont.add(panelSecond, "2");
        cl.show(panelCont, "1");

        buttonOne.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent arg0)
            {
                cl.show(panelCont, "2");
            }
        });

        buttonSecond.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent arg0)
            {
                cl.show(panelCont, "1");
            }
        });
    }
}
代码语言:javascript
复制
import javax.swing.JFrame;

public class Frame extends JFrame
{
    public Frame()
    {
        CardJPanel panel = new CardJPanel();
        setContentPane(panel);
        setVisible(true);

// if I do this it displays the panel just fine
        JPanel panel2 = new JPanel();
        panel.setBackground(Color.MAGENTA);
        setContentPane(panel2);
    }
}
代码语言:javascript
复制
import javax.swing.JFrame;

public class Main
{
    public static void main(String[] args)
    {
        Frame startFrame = new Frame();
        startFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        startFrame.setSize(450, 400);
        startFrame.setVisible(true);
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-25 02:42:12

CardJPanel中,您应该添加以下一行:

代码语言:javascript
复制
this.add(panelCont);

可能就在你展示它之前:

代码语言:javascript
复制
public CardJPanel()
{
    panelCont.setLayout(cl);
    this.add(panelCont);
    panelFirst.add(buttonOne);
    panelSecond.add(buttonSecond);
    panelFirst.setBackground(Color.BLUE);
    panelSecond.setBackground(Color.GREEN);

    panelCont.add(panelFirst, "1");
    panelCont.add(panelSecond, "2");

    this.add(panelCont);
    cl.show(panelCont, "1");

    buttonOne.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent arg0)
        {
            cl.show(panelCont, "2");
        }
    });

    buttonSecond.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent arg0)
        {
            cl.show(panelCont, "1");
        }
    });

}

你有JPanel panelCont,但实际上它从未被使用过。您希望将其添加到JPanel (或CardJPanel)本身,以便显示它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21345642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档