2016-04-27 51 views
1

我的代码中有2个JPanel。第一个是Furutsu7,它是包含我的游戏的主要JPanel。第二个JPanel是Jbutton的开始。我试图完成的是在用户点击Jbutton之后,Furutsu7 JPanel会出现。单击Jbutton后更改JPanels

这是我创建按钮的设置类。

public void setup(){ 
    JFrame f = new JFrame("Start "); 
    JPanel card1 = new JPanel(); 
    JPanel card2 = new JPanel(); 


    cards = new JPanel(new CardLayout()); 

    JButton Card1Button = new JButton("Start"); 
    card1.add(Card1Button); 
    JButton Card2Button = new JButton("Exit"); 
    card2.add(Card2Button); 

    cards.add(card1, "C1"); 
    cards.add(card2, "C2"); 

    f.add(cards, BorderLayout.CENTER); 

    f.setTitle("Furutsu"); 
    f.setSize(500, 300); 
    f.setLocationRelativeTo(null); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setVisible(true); 



} 

我需要帮助的是我为了切换到Furutsu JPanel而执行的操作。

public void actionPerformed(ActionEvent e) { 


} 
+0

crossposted:http://www.coderanch.c OM /吨/ 664974/GUI/JAVA /更改-面板单击-的JButton – camickr

回答

5

使您的CardLayout成为该类的一个字段,以便您可以更轻松地在actionPerformed方法中获取它。否则,你需要拨打(CardLayout) cards.getLayout(),这是一件危险的事情。例如:

public class MyClass implements ActionListener { 
    private CardLayout cardLayout = new CardLayout(); 
    private JPanel cards = new JPanel(cardLayout); 

    public void setup(){ 
     JFrame f = new JFrame("Start "); 
     JPanel card1 = new JPanel(); 
     JPanel card2 = new JPanel(); 

     // cards = new JPanel(new CardLayout()); 

     JButton Card1Button = new JButton("Start"); 
     card1.add(Card1Button); 
     JButton Card2Button = new JButton("Exit"); 
     card2.add(Card2Button); 

     cards.add(card1, "C1"); 
     cards.add(card2, "C2"); 

     f.add(cards, BorderLayout.CENTER); 

     f.setTitle("Furutsu"); 
     f.setSize(500, 300); 
     f.setLocationRelativeTo(null); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 

然后你就可以直接引用它:

@Override 
public void actionPerformed(ActionEvent e) { 
    // now you can call methods on your cardLayout variable: 
    cardLayout.show(...); // I'll leave it to you to figure out what to put in here 
} 

更多关于CardLayout,请查看其tutorial

请注意,如果你只是想换入前进组件或向后的顺序,请看CardLayout的其他方法,如next(cards)previous(cards)