关闭父类中的JFrame

时间:2015-03-22 20:27:20

标签: java swing class jframe

我准备编写一个小游戏。我有我的主要课程MenuFrame,我称之为我的Gui课程来吸引我的游戏。

MenuFrame.java:

public class MenuFrame extends JFrame implements ActionListener {

    private JButton start;

    public static void main(String[] args) {
        MenuFrame mainframe = new MenuFrame("Menu");
        mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainframe.setSize(600, 400);        
        mainframe.setLayout(null);
        mainframe.setVisible(true);
    }

    public MenuFrame(String title) {        
        super(title);           
        start = new JButton("Start game");
        start.setBounds(220, 60, 160, 40);
        start.addActionListener(this);
        add(start);
    }

    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == start) {
            game(hauptSpiel);
        }
    }

    public static void game() {
        JFrame game = new JFrame;
        game.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        game.setUndecorated(true);
        game.setResizable(false);
        game.setSize(480, 800);
        game.setLocation(1920/2-480/2, 1080/2-800/2);
        game.setVisible(true);
        game.add(new Gui());        
    }
}

正如您所看到的,我从我的Gui()虚空中打电话给我的班级game() 在我的Gui课程中,我做了一些绘画。

该课程看起来有点像这样:

public class Gui extends JPanel implements ActionListener {

    public Gui() {              
        setFocusable(true); 
        ImageIcon i = new ImageIcon(background.jpg);
        background = i.getImage();

        ImageIcon b = new ImageIcon("ball.png");
        ball = b.getImage();
    }   

    public void paint(Graphics g) {
        Graphics2D f2 = (Graphics2D)g;

        f2.drawImage(background, 0, 0, null);
        f2.drawImage(ball, 0, 600, null);
    }   
}

为了清晰和易于理解,我删除了我的游戏逻辑。

但是,如果游戏结束,我想将game() JFrame部署到MenuFrame班级。

有没有办法干净顺利?

1 个答案:

答案 0 :(得分:0)

我能想到两种方法来做到这一点。我自己还是比较陌生,但我自己也遇到过这种情况。这就是我如何做到的(我个人喜欢选项2,但不知道这是否是一种可接受的OOP技术)

自上而下:垃圾收集MO

1)在MenuFrame中有一个定期调用的方法,并在GUI /游戏对象中检查一个指示对象是否完成的布尔值。如果是真的,请将其丢弃。

自下而上:主动儿童MO

2)在MenuFrame中有一个方法来处理作为参数发送给它的对象。从#34;游戏"内部呼叫所述方法将自己作为参数传递。该方法可以是静态的以清除实例问题。如果安全性是一个问题(不要随意丢弃对象),请指定如果调用所述方法,则“儿童游戏”#34;处置。有点像吸气剂/定位器方法,它限制了可以处理的可能性。

请分享您的想法。