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

标签 java swing static static-variables

我是所有 GUI 东西的新手,我想知道为什么我必须在代码中声明所有带有“静态”的 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);            
    }

最佳答案

这是因为您的 public static void Inicio() 是静态的。您无法从静态方法调用非静态属性

这是使用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);
    }
}

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

关于java - 如何替换这些静态 JFrame 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748514/

相关文章:

函数内的 C++ 多线程静态 POD 初始化

c# - C# winforms 中的静态类变量范围问题 - 为什么这段代码不起作用?

java - 如果只有 x-y 循环有效,请给出答案

java - 静态 block 中不允许使用公共(public)修饰符?

java - 使用 Vavr 获取正则表达式组

java - 如何将水平滚动条锚定到 JScrollPane 的顶部

java - 为什么 spring 应用程序在 tomcat 和 jetty 服务器上工作,而在 jboss 服务器上以 404 响应?

java - 切换表格列以输入数据

java - 仅当我第一次按下调整大小按钮时为空白图像

java - OpenCV Android 上的静态初始化