从java程序中的其他类调用在一个类中实例化的对象

时间:2014-05-23 16:47:40

标签: java swing object

我有三节课。

A类扩展了jFrame(这是主要的用户界面)

B类扩展了jPanel(这个被调用出现在主jFrame中)

和C类进行一些文件处理和处理。

我要做的是在A类中实例化C类对象并在B类中调用它。

以下是一些示例代码:

Public Class A extends javax.swing.JFrame {

    Public A(){
       C ObjectOfC = new C();
       B panelWithButtons = new B();
    }
}

public Class B extends javax.swing.JPanel{
    String s = ObjectOfC.getName();
}

public Class C{
    String name;
    public String getName(){
        return this.name;
    }
}

无论如何要完成这项工作?还是失败的原因?

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点,具体取决于您要完成的任务。您可能希望构建一个构造函数或B的方法,它将对象C作为参数。

示例:

Public Class A extends javax.swing.JFrame {

    Public A(){
       C objectOfC = new C();
       B panelWithButtons = new B(objectOfC);
    }
}

public Class B extends javax.swing.JPanel{

    String s;

    public B (C objectOfC) {
        this.s = objectOfC.getName();
    }
}

public Class C{
    String name;
    public String getName(){
    return this.name;
    }
}

根据你的评论单身例子:

Public Class A extends javax.swing.JFrame {

    Public A(){
       B panelWithButtons = new B();
    }
}

public Class B extends javax.swing.JPanel{
    String s;
    objectOfC C = C.getInstance();

    this.s = objectOfC.getName();
}

public class C {
    private static String name;
    private static final C INSTANCE = new C();

    private C() {}

    public static C getInstance() {
       return INSTANCE;
    }

    public static String getName() {
        return this.name;
    }
}

更改变量的单例示例(以及从原始代码中删除的错误。):

public class A extends javax.swing.JFrame {

    public A() {
        C objectOfC = C.getInstance();
        objectOfC.setName("Bob");
        B panelWithButtons = new B(objectOfC);
        System.out.println("objectOfC_A:" + objectOfC.getName()); //return "George"
    }
}

public class B extends javax.swing.JPanel {
    public B (C objectOfC) {
        C c2 = C.getInstance();

        objectOfC.setName("Fred");
        c2.setName("George");
        System.out.println("objectOfC_B:" + objectOfC.getName()); //returns "George"
        System.out.println("c2: " + c2.getName()); //returns "George"
    }

}

public class C {
    private static String name;
    private static final C INSTANCE = new C();

    private C() {}

    public static C getInstance() {
        return INSTANCE;
    }

    public String getName() {
        return C.name;
    }

    public void setName (String name) {
        C.name = name;
    }
}

使用此示例,您可以从任何类调用C.getInstance,它们将共享同一个实例。但是,您必须小心如何访问该对象;有很多关于多线程单例的教程,如果你打算同时从多个对象修改C实例中的数据,你需要做的。