我有三节课。

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

B类扩展了jPanel(这个名称被称为出现在主jFrame的内部)

和Class 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;
    }
}


反正有做到这一点吗?还是迷失了原因?

最佳答案

有多种方法可以执行此操作,具体取决于您要完成的工作。您可能想要为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实例中的数据,那么有很多关于多线程单例的教程。

09-10 09:42
查看更多