Java:使用CardLayout时如何完整显示卡片JPanel

标签 java swing applet layout-manager cardlayout

我在使用此 JApplet 时遇到问题。目前,我有一个 CardLayout JPanel,其中包含两个 BorderLayout JPanel。每当我运行它时,除非我使用 setVisible( true) 对于每个 LayoutManager。此外,我的 ActionListener 都不起作用。我假设是因为他们只使用 show() 并且我还必须做其他事情来暗示我。

我必须使用setVisible(true)吗?从其他问题看来,有一种方法可以做到这一点而无需这样做。这是我遇到问题的代码:

/*
*Java Version:      1.8.0_25
*Author:            Peadar Ó Duinnín
*Student Number:    R00095488
*/

package As1;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class AUIJApplet extends JApplet implements ActionListener {
    private final int WIDTH = 600;
    private final int HEIGHT = 400;
    private int highScore;
    private int currentScore;

    JPanel panelCont = new JPanel();
    JPanel startPanel = new JPanel();
    JPanel gamePanel = new JPanel();
    JButton newGameButton = new JButton("New Game");
    JButton endGameButton = new JButton("End Game");
    JLabel highScoreLabel;
    JLabel currentScoreLabel;
    CardLayout cl = new CardLayout();
    BorderLayout bl = new BorderLayout();

    public AUIJApplet() {
        highScore = 0;
    }

    @Override
    public void init() {
        setSize(WIDTH, HEIGHT);

        panelCont.setLayout(cl);
        startPanel.setLayout(bl);
        gamePanel.setLayout(bl);

        startPanel.add(newGameButton, BorderLayout.SOUTH);
        gamePanel.add(endGameButton, BorderLayout.SOUTH);
        startPanel.setBackground(Color.BLUE);
        gamePanel.setBackground(Color.GREEN);

        panelCont.add(startPanel, "Start Applet Screen");
        panelCont.add(gamePanel, "New Game Screen");

        newGameButton.addActionListener((e) -> {
            newGame();
        });

        endGameButton.addActionListener((e) -> {
            quitGame();
        });

        cl.show(panelCont, "Start Applet Screen");
        this.add(panelCont);
    }

    public void newGame() {
        cl.show(panelCont, "New Game Screen");
        showScores(gamePanel);
    }

    public void quitGame() {
        cl.show(panelCont, "Start Applet Screen");
        if (currentScore > highScore) {
            highScore = currentScore;
        }
        currentScore = 0;
    }

    public void showScores(JPanel currentPanel) {
        currentPanel.add(new JLabel("High Score:") , BorderLayout.EAST);
        currentPanel.add(highScoreLabel, BorderLayout.EAST);
        currentPanel.add(new JLabel("Current Score:"), BorderLayout.EAST);
        currentPanel.add(currentScoreLabel, BorderLayout.EAST);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {

    }
}

最佳答案

我已经编写了一些类似的代码来执行相同的操作,它对我有用,尝试从头开始编写代码。这是我的代码。

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.JApplet;
import javax.swing.*;


    public class Example extends JApplet {

        JPanel panel1,panel2,mainPanel;
        JButton start,stop;
        CardLayout cl = new CardLayout();
        @Override
        public void init() {
            panel1 = new JPanel();
            panel1.setBackground(Color.red);
            panel1.setLayout(new BorderLayout());
            panel2 = new JPanel();
            panel2.setBackground(Color.blue);
            panel2.setLayout(new BorderLayout());
            start = new JButton("Start");
            stop = new JButton("stop");
            panel1.add(start,BorderLayout.SOUTH);
            panel2.add(stop,BorderLayout.SOUTH);
            mainPanel = new JPanel();
            mainPanel.setLayout(cl);
            mainPanel.add(panel1,"First Panel");
            mainPanel.add(panel2, "Second Panel");
            start.addActionListener((ActionEvent e) -> {
                newGame();
            });
            stop.addActionListener((ActionEvent e) ->{
                endGame();
            });
            this.add(mainPanel);
        }

        public void newGame()
        {
            cl.show(mainPanel, "Second Panel");
        }
        public void endGame()
        {
            cl.show(mainPanel,"First Panel");
        }
    }

关于Java:使用CardLayout时如何完整显示卡片JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26553543/

相关文章:

java - 如何将数据从一个 JComboBox 传递到一条 SQL 语句,该 SQL 语句将调用第二个 JComboBox 的值?

java - Action Listener 检测单个事件的多个事件

java - 无法从页面调用小程序方法

java - 适用于未签名小程序的默认 Java 策略文件在哪里?

java - 区分机器人鼠标点击和人类鼠标点击

java - JPA:容器管理的实体管理器何时被清除或关闭?

java - 在命令行中执行 flyway 回调

java - Hibernate Projections - Projections.property 和 Projections.groupProperty 之间有什么区别

java - Maven中央仓库: Return code is: 503 , ReasonPhrase:backend read error

java - 类-图形-drawString()