如何使用卡片布局?
问题描述:
我很难弄清楚什么是卡片布局。我阅读了很多文章,并实施了这个小例子来了解卡片布局如何工作。但我不明白一些方法(这是评论)。有人可以帮助我(我使用命令行)。如何使用卡片布局?
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class C_layout implements ActionListener
{
JButton b2;
JButton b1;
JFrame f1;
JPanel card1;
JPanel card2;
JPanel Jp;
void Example()
{
f1=new JFrame("CardLayout Exercise");
f1.setLocationRelativeTo(null);
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.setSize(500,500);
f1.setVisible(true);
Container cont=f1.getContentPane();
cont.setLayout(null);
Jp=new JPanel(new CardLayout()); //<-- How to implement card layout here (MAIN PANEL)
f1.add(Jp);
Jp.setLayout //<-- Not sure what means here ERROR
card1=new JPanel(); // First panel
Jp.add(card1);
card2=new JPanel(); // Second panel
Jp.add(card2);
JLabel lb1=new JLabel("This is the first Panel");
lb1.setBounds(250,100,100,30);
card1.add(lb1);
b1=new JButton("NEXT >>");
b1.setBounds(350,400,100,30);
b1.addActionListener(this);
card1.add(b1);
JLabel lb2=new JLabel("This is the second Panel");
lb2.setBounds(250,100,100,30);
card2.add(lb2);
b2=new JButton("<< PREV");
b2.setBounds(250,300,100,30);
b2.addActionListener(this);
card2.add(b2);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)
{
CardLayout cardLayout = (CardLayout) Jp.getLayout();
cardLayout.show(card2,"2");
}
if(e.getSource()==b2)
{
// I still haven't implemented this action listener
}
}
}
class LayoutDemo1
{
public static void main(String[] args)
{
C_layout c=new C_layout();
c.Example();
}
}
答
cont.setLayout(null);
是坏,坏主意,很快失去它...
你将需要以管理到您CardLayout
参考。通过定义一个CardLayout
实例字段开始......
private CardLayout cardLayout;
现在,创建的CardLayout
您的实例,并将其应用到您的面板...
cardLayout = new CardLayout();
Jp=new JPanel(cardLayout);
这...
Jp.setLayout //<-- Not sure what means here ERROR
没有做任何事情,就Java而言这不是一个有效的陈述,事实上,它实际上是一种方法,它应该引用你所希望的LayoutManager
但由于您已经在创建Jp
的实例时完成了这项工作,因此您并不需要它...
您将需要一些方法来确定要显示的组件, CardLayout
做到这一点通过String
名称,例如...
card1=new JPanel(); // First panel
Jp.add(card1, "card1");
card2=new JPanel(); // Second panel
Jp.add(card2, "card2");
现在,在ActionListener
,你要问CardLayout
到show
所需的视图...
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)
{
cardLayout.show(Jp1,"card2");
} else if(e.getSource()==b2)
{
cardLayout.show(Jp1,"card1");
}
}
请注意,为使CardLayout#show
正常工作,您需要为其分配CardLayout
的容器参考,并指定要显示的视图的名称。
查看How to Use CardLayout了解更多详情
非常感谢:D! – 2014-12-04 06:03:37
希望它有帮助... – MadProgrammer 2014-12-04 06:04:51
你能解释一些例子:如何显示框架,它给了我一个空白的框架。我不明白CardLayout#显示 – 2014-12-04 14:42:33