我正在学习关于YouTube on CardLayout的教程。我下载了原码,结果很好。但是对于我想要做的程序,我需要一个单独的类来运行应用程序(即只使用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);
}
}发布于 2014-01-25 02:42:12
在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)本身,以便显示它。
https://stackoverflow.com/questions/21345642
复制相似问题