如何替换这些静态JFrame变量?

时间:2013-11-03 00:26:12

标签: java swing static static-variables

我是所有GUI内容的新手,我想知道为什么我必须在我的代码中使用“static”声明所有JFrame(否则它不会编译)以及如何修改我的代码以进行编译宣称他们是“静止的”?

public class Ventana extends JFrame {
    private static JFrame frameInicio = new JFrame("Ingresar Datos");
    private static JFrame frameCrearUsuario = new JFrame("Crear Usuario");
    private static JFrame frameMenu = new JFrame("Menu Del Juego");
    private static JFrame frameJuego = new JFrame("El Ahorcado");

    public static void main(String[] args) {

        Inicio();
    }
    public static  void Inicio(){
        frameCrearUsuario.dispose();
        frameMenu.dispose();
        frameInicio.setSize(450,200);
        frameInicio.setLocationRelativeTo(null);
        frameInicio.add(new FrameInicio());
        frameInicio.setDefaultCloseOperation(EXIT_ON_CLOSE);        
        frameInicio.setVisible(true);       
    }

    public void CrearUsuario(){
        frameInicio.dispose();
        frameCrearUsuario.setSize(450,300);
        frameCrearUsuario.setLocationRelativeTo(null);
        frameCrearUsuario.add(new FrameCrearUsuario());
        frameCrearUsuario.setDefaultCloseOperation(EXIT_ON_CLOSE);  
        frameCrearUsuario.setVisible(true);     
    }

    public void Menu(){
        frameInicio.dispose();
        frameJuego.dispose();
        frameMenu.setSize(660,290);
        frameMenu.setLocationRelativeTo(null);
        frameMenu.add(new FrameMenu());
        frameMenu.setDefaultCloseOperation(EXIT_ON_CLOSE);      
        frameMenu.setVisible(true);     
    }
    public void Juego(){
        frameMenu.dispose();
        frameJuego.setSize(1100,800);
        frameJuego.setLocationRelativeTo(null);
        frameJuego.add(new FrameJuego());
        frameJuego.setDefaultCloseOperation(EXIT_ON_CLOSE); 
        frameJuego.validate();
        frameJuego.setVisible(true);            
    }

1 个答案:

答案 0 :(得分:1)

这是因为public static void Inicio()是静态的。您无法从static方法

调用非静态属性

以下是使用JFrame的常用方法。为JFrame创建一个构造函数并添加其中的所有组件。然后只需在main方法

中创建JFrame对象
public class Ventana extends JFrame {
    JPanel panel = new JPanel();
    JButton button = new JButton("button");
    JTextArea jta = new JTextArea();

    public Vantan(){
        add(panel);
        add(button);
        add(jta);
    }

    public static void main(String[] args){
        JFrame frame = new Ventana();
        frame.setTitle("Frame);
        frame.setSize(500, 500);
        frame.pack();
        frame.setDefaulCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

这样您就不需要像您的情况那样的静态属性。