Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
150 views
in Technique[技术] by (71.8m points)

java - How to reference JFrame

I have a problem which is most likely "simple" however I can't figure it out. I am trying to reference my current JFrame so that I can dispose of it, and create a new one, thus "resetting" the program, however I and having trouble figuring out how to reference the JFrame, I have tried, super, this and getParent(), but none of the seem to work. Thanks for any / all help. ^^

Here is my code:

Main Class, just sets up the Jframe and calls the class that creates everything:

    public static void main(String args[]) {
    JFrame window = new JFrame();
    Director director = new Director(window, args);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setLocationRelativeTo(null);
    window.pack();
    window.setVisible(true);
}

}

Class the creates everything:

    import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;


public class Director extends JFrame implements CollisionListener {

    private BrickWall wall;
    private JLabel gameTitle, gameScore, gameLives;
    private JPanel controlPanel;
    private JButton reset, quit;
    private JRadioButton hard, normal, easy;
    private int score = 6, lives = 5;
    private ButtonGroup difficulty;


    public Director(JFrame window, String[] args) {
        window.getContentPane().add(makeGamePanel(), BorderLayout.CENTER);
        window.getContentPane().add(gameControlPanel(), BorderLayout.NORTH);

    }


    public void collisionDetected(CollisionEvent e) {
        wall.setBrick(e.getRow(), e.getColumn(), null);
    }

    private JComponent makeGamePanel() {
        wall = new BrickWall();
        wall.addCollisionListener(this);
        wall.buildWall(3, 6, 1, wall.getColumns(), Color.GRAY);
        return wall;
    }

    // Reset method I'm trying to dispose of the JFrame in.
    private void reset() {
        JFrame frame = new JFrame();

        frame.getContentPane().add(makeGamePanel(), BorderLayout.CENTER);
        frame.getContentPane().add(gameControlPanel(), BorderLayout.NORTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);

    }

    private JComponent gameControlPanel() {

        // CONTROL PANEL PANEL!
        controlPanel = new JPanel();

        gameTitle = new JLabel("Brickles");
        gameScore = new JLabel("Score:" + "   " + score);
        gameLives = new JLabel("Lives:" + "   " + lives);
        reset = new JButton("Reset");
        quit = new JButton("Quit");
        hard = new JRadioButton("Hard", false);
        normal = new JRadioButton("Normal", true);
        easy = new JRadioButton("Easy", false);
        difficulty = new ButtonGroup();
        difficulty.add(hard);
        difficulty.add(normal);
        difficulty.add(easy);
        controlPanel.setLayout(new GridLayout(4, 2));
        controlPanel.add(gameTitle);
        controlPanel.add(gameScore);
        controlPanel.add(hard);
        controlPanel.add(gameLives);
        controlPanel.add(normal);
        controlPanel.add(reset);
        controlPanel.add(easy);
        controlPanel.add(quit);

        // Action Listener, where I'm caling the reset method.

        reset.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                reset();
            }
        });
        return controlPanel;
    }

}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can refer to the "outer this" from a nested class with the following syntax:

reset.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
         Director.this.reset();
    }
});

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...