2014-12-04 161 views
0

我很难弄清楚什么是卡片布局。我阅读了很多文章,并实施了这个小例子来了解卡片布局如何工作。但我不明白一些方法(这是评论)。有人可以帮助我(我使用命令行)。如何使用卡片布局?

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(); 


    } 
} 

回答

3

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,你要问CardLayoutshow所需的视图...

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了解更多详情

+0

非常感谢:D! – 2014-12-04 06:03:37

+1

希望它有帮助... – MadProgrammer 2014-12-04 06:04:51

+0

你能解释一些例子:如何显示框架,它给了我一个空白的框架。我不明白CardLayout#显示 – 2014-12-04 14:42:33