Утилизация JFrame другого класса - PullRequest
0 голосов
/ 25 октября 2018

Итак, я разрабатывал небольшую игру для школьного проекта (только что начался с Swing GUI), и у меня есть класс с именем Background, который остается открытым все время, пока разрешение не будет изменено в меню настроек.

В меню настроек я создаю новый экземпляр класса Background с новым разрешением.

Проблема в том, что я не уверен, как избавиться от старого экземпляра Background при этом.

Вот класс Background :

package hangman;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.util.Scanner;
import javax.swing.JFrame;

public class Background extends javax.swing.JFrame {
    private int width = 1920;
    private int height = 1080;
    private String resolution;
    private String screenSize;

    public Background(String constrScreenSize) {
        initComponents();
        screenSize = constrScreenSize;
        getDefaultRes();

        if(screenSize.equals("Fullscreen")) {
            setToFullscreen();
        }
        else {
            setToWindowed();
        }
    }

    public Background(String constrScreenSize, String constrResolution) {
        initComponents();
        screenSize = constrScreenSize;
        resolution = constrResolution;
        parseResolution(resolution);

        if(screenSize.equals("Fullscreen")) {
            setToFullscreen();
        }
        else {
            setToWindowed();
        }
    }

    public Background() {
        initComponents();
        setToFullscreen();
    }

    //Sets the size of the background to exactly the size of the screen
    public void setToFullscreen() {
        dispose();
    setExtendedState(JFrame.MAXIMIZED_BOTH);
        setUndecorated(true);
    }

    public void setToWindowed() {
        dispose();
        setSize(width, height);
        setUndecorated(false);
    }

    public void parseResolution(String res) {
        Scanner scanRes = new Scanner(res).useDelimiter(" ");
        width = scanRes.nextInt();
        scanRes.next();
        height = scanRes.nextInt();
    }

    public void getDefaultRes() {
        Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
        width = (int) screenDimension.getWidth();
        height = (int) screenDimension.getHeight();
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Background().setVisible(true);
        }
    });
}                 

Затем я вызываю конструктор этого класса Settings

private void acceptSettingsButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                     
    new Background(screenSizeSettingComboBox.getSelectedItem().toString(), resolutionSettingComboBox.getSelectedItem().toString()).setVisible(true);
}

Очевидно, что тогда создается новый экземпляр указанного класса Background.Проблема в том, что теперь у меня осталось два экземпляра, и я хочу только новый.

Какой самый простой способ сделать это?

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...