Java - 如何在同一个类中的不同静态方法中共享对象

时间:2017-06-04 07:37:51

标签: java

如何在静态方法之间共享对象?这是否可能?还有更好的方法吗?

在我的代码中,我在一个类中有一个框架。我有不同的静态方法来在同一个类中使用此框架。我在另一个类中调用这些方法。

对于挥杆来说,有更好的方法吗?基本上我想创建一个Frame,在其中我可以通过其他类的方法编辑大小,颜色和内容(这些类将具有我将在此框架上使用的Panel)。

调用静态方法的类:

import javax.swing.*;

public class Main{

    // Display Login Window
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            try
            {
                new loginFrames();
                loginFrames.showFrame("hello", 1200, 800);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }

        });
    }
}

使用静态方法的类:

import javax.swing.*;
import java.awt.*;

public class loginFrames{

    public JFrame appFrame;


    public void createFrame(String frameName, int frameW, int frameH) {

        // Create JFrame with frame name, width, and height
        appFrame = new JFrame(frameName);
        appFrame.setSize(frameW, frameH);

        // Get the content pane and set the background colour black
        Container absFrameContentPane = appFrame.getContentPane();
        absFrameContentPane.setBackground(Color.BLACK);

        // Show the frame
        appFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        appFrame.setVisible(true);
    }

    // Callable from Main class
    public static void showFrame(String frameName, int frameW, int frameH) {
        loginFrames applicationFrame = new loginFrames();
        applicationFrame.createFrame(frameName, frameW, frameH);
    }

    // Callable from Main class
    public static void appAddPanel(String frameName, int frameW, int frameH) {
    // How do I call the same object above, here?
    }
}

2 个答案:

答案 0 :(得分:1)

您的代码违反了各种OO原则,首先是信息隐藏/封装

您的变量appFrame应声明为私有,并且只能通过loginFrames类进行访问。

另外:由于变量appFrame未声明为 static ,因此无法从该类中的静态方法(直接)访问它。

解决方案是从方法中删除 static 关键字,并通过类的对象访问它们(这听起来是否需要在对象 >面向对象的语言?)

答案 1 :(得分:0)

对我来说,我更喜欢使用外部文件作为JFrame选项。 FileReader用于从文件中获取值,循环并在数组或变量上分配它们。和PrintWriter用于更改选项。希望这个帮助