Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡片布局有问题_Java_Layout_User Interface_Jpanel - Fatal编程技术网

Java 卡片布局有问题

Java 卡片布局有问题,java,layout,user-interface,jpanel,Java,Layout,User Interface,Jpanel,我正在YouTube上观看CardLayout上的教程。我下载了,结果很好。但是对于我正在尝试制作的程序,我需要一个单独的类来运行应用程序(即仅使用main方法的单独类),一个单独的类用于JFrame,至少一个单独的类用于JPanels。我尝试分离代码,但它为我显示了一个空白的JFrame import java.awt.CardLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.ev

我正在YouTube上观看
CardLayout
上的教程。我下载了,结果很好。但是对于我正在尝试制作的程序,我需要一个单独的类来运行应用程序(即仅使用
main
方法的单独类),一个单独的类用于
JFrame
,至少一个单独的类用于
JPanel
s。我尝试分离代码,但它为我显示了一个空白的
JFrame

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");
            }
        });
    }
}



CardJPanel
中,您应该添加此行:

this.add(panelCont);
可能就在您展示之前:

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
)本身,以便显示它

this.add(panelCont);
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");
        }
    });

}