有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在单击Jbutton后更改JPanel

我的代码中有2个JPanel。第一个是Furutsu7,它是主要的JPanel,包括我的游戏。第二个JPanel是start Jbutton。我试图实现的是,在用户单击Jbutton之后,furutsu7jpanel将出现

这是我创建按钮的设置类

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) {


}

共 (1) 个答案

  1. # 1 楼答案

    将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)