簡體   English   中英

重置倒數計時器不起作用+ Java Swing游戲中的JDialog / JOptionPane

[英]Resetting countdown timer not working + JDialog/JOptionPane in Java Swing game

我對Java Swing不太滿意,並且嘗試使用計時器延遲3秒開始游戲

但同時我想顯示一個對話框(游戲也必須等待3秒,因此焦點必須放在對話框上)

所以我的對話框如下所示: 獲得了此示例代碼

因此,在游戲面板中,我這樣做:

public class GamePlayPanel extends JPanel implements ActionListener {
    // attributes
    private JOptionCountDownTimer countDownDialog;
    public GamePlayPanel(MainWindow mainWindow) {
        // initialization attributes
        initLayoutPanel();
        this.timer = new Timer(DELAY, this);
        // Added a delay of 3 seconds so you can prepare to for the game
        this.timer.setInitialDelay(3000);
        resetTime();
    }        


    public void startGame() {
        this.gamePanel.requestFocus();
        this.countDownDialog.startCountDown();
        startTimer(); // this is my game timer to record the game time
    }


    public void restartGame() {
        this.countDownDialog.resetCountDown();
        startTimer();       
        this.gamePanel.requestFocus();
    }
}

它工作正常,但如果我重新啟動游戲,則倒數計時器將從0-> 2秒開始。

在我的類JOptionCountDownTimer上還有更好的主意嗎? 我試圖使其擴展JDialog類,但無法使其正常工作。

試試看,看看是否適合您。 您可以僅獲取對話框類代碼。 您需要做的就是將其傳遞給父框架,對於模態和所需的秒數則為true。 您可能還想修飾它。 我只是提供功能

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.border.EmptyBorder;

public class CountDownTimer {
    public CountDownTimer() {
        final JFrame frame = new JFrame();
        JButton button = new JButton("Open Dilaog");
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                new CountDownTimerDialog(frame, true, 5);
            }
        });

        frame.add(button);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private class CountDownTimerDialog extends JDialog {
        private int count;

        public CountDownTimerDialog(JFrame parent, boolean modal, int seconds) {
            super(parent, modal);
            count = seconds;
            final JLabel countLabel = new JLabel(String.valueOf(seconds), JLabel.CENTER);
            countLabel.setFont(new Font("impact", Font.PLAIN, 36));
            JLabel message = new JLabel("Wait to Start Game");
            message.setFont(new Font("verdana", Font.BOLD, 20));

            JPanel wrapper = new JPanel(new BorderLayout());
            wrapper.setBorder(new EmptyBorder(10, 10, 10, 10));
            wrapper.add(countLabel);
            wrapper.add(message, BorderLayout.SOUTH);
            add(wrapper);

            Timer timer = new Timer(1000, new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    if (count == -1) {
                        dispose();
                    } else {
                        countLabel.setText(String.valueOf(count));
                        count--;
                    }
                }
            });
            timer.setInitialDelay(0);
            timer.start();

            pack();
            setLocationRelativeTo(parent);
            setVisible(true);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new CountDownTimer();
            }
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM