无法处理jframe窗口?

时间:2014-04-08 18:48:42

标签: java swing jframe jbutton dispose

我试图在点击任何一个难度按钮后处理难度窗口,但不会发生。我试过.disposeframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,但我无法理解。它只是放置还是更多?

import java.awt.FlowLayout;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.GridLayout;

public class Game extends JFrame{

    public static JFrame frame = new JFrame();


    private JLabel lab;

public static void main(String[] args) {

    Game difficulty = new Game();
    difficulty.setSize(350,105);
    difficulty.setTitle("Difficulty.");
    difficulty.setVisible(true);
    difficulty.setLocationRelativeTo(null);


    /**Game sudoku = new Game();
    sudoku.setSize(900, 900);
    sudoku.setVisible(false);*/

}   


public Game(){

    setLayout(new FlowLayout());
    lab = new JLabel("Please select your difficulty.");
    add(lab);

    JButton easy;
    easy = new JButton("Easy");
    add(easy);

     easy.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e)
            {
                //Execute when button is pressed
                System.out.println("You clicked the button");
                JFrame.dispose();
            }
        });   


    JButton medium;
    medium = new JButton("Medium");
    add(medium);

    JButton hard;
    hard = new JButton("Hard");
    add(hard);

    JButton evil;
    evil = new JButton("Evil!");
    add(evil);

}
}

6 个答案:

答案 0 :(得分:5)

首先,您正在扩展JFrame并创建JFrame的对象,如果我没有错,那么就不应该这样做。

public class Game extends JFrame{

    public static JFrame frame = new JFrame();

正如@Salah所说,JFrame不是静态的,所以它应该是:

public JFrame frame = new JFrame();

要解决您的问题,您需要处置新的JFrame(是的,您在一个类中有3个JFrame,而不是1,这是您想要的),如果您已经创建了JFrame.dispose();一个对象或您正在扩展JFrame,您可以:

this.dispose(); //For the extended JFrame

frame.dispose(); //For the object you created

答案 1 :(得分:3)

dispose()方法不是静态的,因此直接从JFrame

调用它不会起作用
JFrame.dispose();

尝试做:

dispose();

或者处置您创建的frame对象

frame.dispose();

详细了解JFrame

答案 2 :(得分:0)

在处理之前尝试将jFrame设置为不可见:

public void disposeJFrame(JFrame frame){
    frame.setVisible(false);
    frame.dispose();
}

答案 3 :(得分:0)

我遇到了同样的问题:

this.dispose();

解决了我的问题。

答案 4 :(得分:-1)

如果您想要关闭整个程序,可以使用System.exit(0);

答案 5 :(得分:-1)

取而代之的是JFrame.dispose();,请使用frame.dispose()JFrame.this.dispose();