2012-11-16 49 views
2

我有一些问题CardLayout。我有一个面板和一个Next按钮。点击它我想显示第二个面板。在我的代码中,当我点击下一个按钮时,下一个面板不显示。有人可以帮我解决这个问题吗?CardLayout显示下一步面板 - 的Java Swing

package com.test; 

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import java.awt.CardLayout; 
import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class CardLay extends JFrame { 

    private JPanel contentPane; 
    private CardLayout ca; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        CardLay frame = new CardLay(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public CardLay() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     ca =new CardLayout(0, 0); 

     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(ca); 

     JPanel panel = new JPanel(); 
     panel.setLayout(null); 

     contentPane.add("1",panel); 

     JButton btnNext = new JButton("NEXT"); 
     btnNext.setBounds(131, 93, 117, 29); 
     btnNext.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       ca.show(contentPane,"1"); 
       System.out.println("button clicked"); 
      } 
     }); 
     panel.add(btnNext); 


     JPanel panel_1 = new JPanel(); 
     contentPane.add(panel_1, "name_1353086933711396000"); 

     JCheckBox chckbxNewCheckBox = new JCheckBox("New check box"); 
     panel_1.add(chckbxNewCheckBox); 
    } 

} 
+0

请看看这个[示例](http://stackoverflow.com/a/13378672/1057230),希望这也许可以帮助一点。 –

回答

4

你需要调用:

ca.show(contentPane, "name_1353086933711396000"); 

对于这个工作,你将不得不添加第二个小组是这样的:

contentPane.add("name_1353086933711396000", panel_1); 

当使用CardLayout请务必保留导航按钮在一个单独的容器上,而不是“卡片”本身,以便在整个导航过程中都可以看到它们。在这里,您可以在框架的BorderLayout.SOUTH位置放置一个新的导航容器。对于顺序导航,可使用方法previousnext

也避免使用绝对定位(null布局)。见Doing Without a Layout Manager (Absolute Positioning)

public CardLay() { 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setSize(500, 400); 

    ca = new CardLayout(0, 0); 

    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    contentPane.setLayout(ca); 

    JPanel panel1 = new JPanel(); 
    panel1.add(new JButton("Test Button")); 
    contentPane.add("card1", panel1); 

    JPanel panel2 = new JPanel(); 
    contentPane.add("card2", panel2); 
    JCheckBox chckbxNewCheckBox = new JCheckBox("New check box"); 
    panel2.add(chckbxNewCheckBox); 

    JPanel navigationPanel = new JPanel(); 

    JButton btnPrevious = new JButton("< PREVIOUS"); 
    btnPrevious.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     ca.previous(contentPane); 
    } 
    }); 
    navigationPanel.add(btnPrevious); 

    JButton btnNext = new JButton("NEXT >"); 
    btnNext.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     ca.next(contentPane); 
    } 
    }); 
    navigationPanel.add(btnNext); 

    add(contentPane); 
    add(navigationPanel, BorderLayout.SOUTH); 
} 

推荐:How to Use CardLayout

+0

但是,我想显示其他面板('面板')。不是这个 –

+0

当你启动你的应用程序时,这个面板已经可见。 – Reimeus

+0

我删除了该面板的代码,但它仍然无法正常工作 –