Java GUI 未加载

标签 java swing user-interface timer

因此,我正在为我的大学项目创建一种王牌游戏,但当我尝试加载界面时遇到困难。框架本身加载了不同的颜色(用于测试背景),但我的按钮和进度条都没有加载。我对 Java 还很陌生,所以我可能错过了一些东西。任何帮助将不胜感激。

package Game;

import java.awt.Color;
import java.awt.GridLayout;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.*;

public class GameInterface extends JFrame{

private JFrame mainWindow;
private JPanel middlePanel, bottomPanel, allPanels;
private JButton GenerateCrimeBtn, DisguiseBtn, SleepBtn;
private JProgressBar energyBar, statusBar, actionBar;
private int interval;
private Timer timer;
private JLabel timerBarLabel, questionLabel;

public GameInterface(){
        middlePanel = new JPanel();
        middlePanel.setBackground(Color.gray);
        bottomPanel = new JPanel();
        allPanels = new JPanel();

        allPanels.setLayout(new BoxLayout(allPanels, BoxLayout.Y_AXIS));
        allPanels.add(middlePanel);
        allPanels.add(bottomPanel);

        mainWindow = new JFrame();
        mainWindow.setTitle("Game");
        mainWindow.setSize(1920,1080);
        mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainWindow.setVisible(true);
        mainWindow.add(allPanels);

        middlePanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
        middlePanel.setLayout(new GridLayout(0,2,10,10));
        middlePanel.add(GenerateCrimeBtn);
        middlePanel.add(DisguiseBtn);
        middlePanel.add(SleepBtn);

        GenerateCrimeBtn = new JButton("Generate Crime");
        DisguiseBtn = new JButton("Disguise");
        SleepBtn = new JButton("Sleep");

        bottomPanel.add(energyBar);
        bottomPanel.add(timerBarLabel);
        bottomPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
        bottomPanel.setLayout(new GridLayout(0,2));

        timerBarLabel = new JLabel("Timer left to answer question; ");
        timerBarLabel.setForeground(Color.darkGray);
        timerBarLabel.setBounds(10,10,50,30);
        energyBar.setBounds(60,10,200,30);
        energyBar = new JProgressBar(0, 100);
}

public JButton getGenerateCrimeBtn() {
        return GenerateCrimeBtn;
}

public JButton getDisguiseBtn() {
        return DisguiseBtn;
}

public JButton getSleepBtn() {
        return SleepBtn;
}

public JPanel getPanels() {
        return allPanels;
}

public Timer getTimer(){
        return timer;
}

public void cancelInterval(){
        interval = -1;
}

public void resetTimer(){
    int delay = 100;
    int period = 100;
    interval = 100;
    energyBar.setValue(100);
    energyBar.repaint();
    timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask(){
            public void run(){
                    setInterval();
            }
    }, delay, period);
}

private void setInterval() {
    if (interval > 0) {
            interval--;
            energyBar.setValue(interval);
            energyBar.repaint();
    }else if (interval == 0){
            timer.cancel();
            JOptionPane.showMessageDialog(allPanels, "You have failed...");
    }
}
}

最佳答案

mainWindow.setVisible(true);

在所有组件都添加到框架之后,这应该是构造函数中的最后一条语句。

编辑:

    generateCrimeBtn = new JButton("Generate Crime");
    disguiseBtn = new JButton("Disguise");
    sleepBtn = new JButton("Sleep");

    middlePanel.add(generateCrimeBtn);
    middlePanel.add(disguiseBtn);
    middlePanel.add(sleepBtn);

    //GenerateCrimeBtn = new JButton("Generate Crime");
    //DisguiseBtn = new JButton("Disguise");
    //SleepBtn = new JButton("Sleep");

您需要在将组件添加到面板之前创建该组件,否则变量为空,因此不会将任何内容添加到面板中。

添加到底部面板的组件的注释相同。

关于Java GUI 未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29871425/

相关文章:

java - 如何从头开始重新启动 gif 动画? J框架

java - 将填充的数组传递给公共(public)变量,以便它可以在其他类中使用

java - 在 JVM 中运行 Android UI

Java:使用本地变量与实例变量?

带有尾随零的 Java 十进制格式结果

java - 在cmd中运行两个版本的Java

Java SWT 文件保存

java - 不幸的是 HelloWorld 停止了(我的应用程序在模拟器上停止了 : Unfortunately )

java - 使用 TableRowSorter 在 JTable 中获取正确的行

java - 如何为 JPanel 创建带有线条和填充的边框