gpt4 book ai didi

java - CardLayout 的问题

转载 作者:行者123 更新时间:2023-12-01 13:35:06 27 4
gpt4 key购买 nike

我正在关注 YouTube 上关于 CardLayout 的教程。我下载了the original code ,效果很好。但对于我试图制作的程序,我需要一个单独的类来运行应用程序(即仅具有 main 方法的单独类),一个用于 JFrame 的单独类>,以及至少一个用于 JPanel 的单独类。我尝试分离代码,但它为我显示一个空白的 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");
}
});
}
}
<小时/>
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);
}
}
<小时/>
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);
}

}

最佳答案

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

关于java - CardLayout 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345642/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com