How to create a restart method using JFrame?

Viewed 26

recently I started learning Java, I watched a YT video where a programmer used static methods and variables to create a simple guess game using JFrame.

Afterwards I tried to implement a close/restart button, after reading some Threads I relized static methods aren´t made that for. So my question is now how do I solve my problem now. :)

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.ThreadLocalRandom;


public class main extends JFrame {

     JLabel text = new JLabel("Please choose a number between 1 & 10  ");
     JLabel textVersuch = new JLabel();
     JButton button = new JButton("Try");
     int myNumber = ThreadLocalRandom.current().nextInt(1,10+1);
     JTextField textField = new JTextField();
     int count = 0;

//is there a better way to hide all this information, but still keep them useable for my methods?

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.openUI(); //error occurs
    }

//How do I manage to start my method openUI() to start my game?

    public void openUI(){

        JFrame frame = new JFrame("Program");
        frame.setSize(400,400);
        frame.setLocation(800,400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setDefaultLookAndFeelDecorated(true);


        text.setBounds(0,50,400,25);
        textVersuch.setBounds(300,0,100,25);
        textField.setBounds(0,150,50,25);
        button.setBounds(50,150,100,25);


        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                try {
                    String textFromTextfield = textField.getText();
                    int number = Integer.parseInt(textFromTextfield);
                    if(number<1 || number>10){
                        text.setText("Your number has to be between 1 & 10 ");
                        textField.setText("");
                    }else{
                        guess(number);
                    }
                }catch (Exception error){
                    text.setText("Please enter a digit! ");
                    textField.setText("");
                }

        }});

        frame.add(button);
        frame.add(textField);
        frame.add(text);
        frame.add(textVersuch);
        frame.setLayout(null);
        frame.setVisible(true);
    }
    public void close(JFrame frame){
        frame.dispose(); //here I want to close the game
    }


    public void guess(int number ) throws InterruptedException {
        count++;
        textVersuch.setText(count + " tries!");
        if(number == myNumber){
            text.setText("You was right! " + " You tried " + count +  " time(s) :)" );
            button.setText("Restart");
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {

                    //How can I restart my JFrame?
                }
            });
        } else if (count < 3) {
            text.setText("Wrong guess! Retry");
            if (number < myNumber){
                text.setText("Your searched number is bigger than" + number );
            }else {
                text.setText("Your searched number is lower than" + number );
            }
        } else {
            text.setText("Sorry, you lost the number was " + myNumber);
        }
        textField.setText("");
    }

}
0 Answers
Related