Java 卡片布局有问题
我正在YouTube上观看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
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");
}
});
}