如何在Java中的两个GUI之间使用相同的数据?

时间:2011-11-30 02:37:02

标签: java swing user-interface

嘿伙计们我正在做家庭作业。我有两个GUI,我想访问相同的数据,这将由我的其他类帐户管理员处理。我相信我需要创建一个主要类,它将同时调用GUI并创建一个accountmanager对象。

构建对象后,如何将信息发送到两个GUI类?

感谢您的帮助,我希望我足够详细。如果不发布所有代码,我真的不知道如何解释它。

修改


好的,我感谢您的回复。我被困在这个..

    Account Accnt = new Account();
GUI1 gui1 = new GUI1();
GUI2 gui2 = new GUI2();

我想通过使用GUI来决定为Account Object存储哪些数据。例如,GUI1打开具有用户输入名称的帐户。帐户为每个打开的帐户分配ID号。然后,GUI2可以通过选择ID号来访问为每个帐户存储的信息。

6 个答案:

答案 0 :(得分:2)

创建对象,将其传递(引用)到两个GUI中(通过构造函数或方法)。

示例:

main(){
    Account accnt = new Account();
    // both GUI objects receive the same accnt object
    GUI1 gui1 = new GUI1(accnt);
    GUI2 gui2 = new GUI2(accnt);
    // your code
}

public class GUI1{
    private Account accnt;

    public GUI1(Account accnt){
        this.accnt = accnt;
        // your code
    }
    // your code
}

public class GUI2{
    private Account accnt;

    public GUI2(Account accnt){
        this.accnt = accnt;
        // your code
    }
    // your code
}

答案 1 :(得分:1)

使用Observer Pattern

让AccountManager类实现java.util.Observable

让GUI类实现java.util.Observer

在AccountManager上为每个GUI类调用addObserver()

在AccountManager中发生更改时调用notifyObservers。

答案 2 :(得分:1)

您可能希望首先研究一些设计模式。你可以使用observer pattern,或者你可以使用MVC design,如果你想做一些更高级的编程,你迟早要学习它......

只需谷歌“java mvc example”并尝试一下。

答案 3 :(得分:1)

正如其他人所说,有很多方法可以解决这个问题,但是你选择这样做的方式需要反映你的能力(即你的老师/讲师等会知道你是否突然实施了观察者模式并且可以解释它是什么。在这种特殊情况下,我会采用Singleton方法,因为没有数据库或任何主要复杂的东西。

单例是一个只创建一个实例的类,它提供了对象的全局访问点。

以下是单例类的示例以及如何使用单个类:

public final class ExampleSingleton {
    private static ExampleSingleton instance = null;

    private ExampleSingleton() { /*Do not allow instantiation*/ }

    public static ExampleSingleton getInstance() {
        if (instance == null) {
            instance = new ExampleSingleton();
        }

        return instance;
    }

    public void sayHello() {
        System.out.println("Hello!");
    }
}

上面的类正在使用私有构造函数,这意味着您无法明确构造ExampleSingleton。这意味着要获得单个对象,您可以执行以下操作:

 ExampleSingleton myObject = ExampleSingleton.getInstance();

然后使用您将引用myObject的对象及其中的任何方法(在本例中为sayHello()

这对您来说意味着您的代码最终会看起来像这样:

public class MyGui1 {
    private ExampleSingleton myData = null;

    public MyGui1() {
        myData = ExampleSingleton.getInstance();
    }

    public updateData(. . .) {
        myData.updateData(. . .);
    }

    public retrieveData(. . . ) {
        myData.retrieveData(. . .);
    }
}

public class MyGui2 {
    private ExampleSingleton myData = null;

    public MyGui2() {
        myData = ExampleSingleton.getInstance();
    }

    . . . 

    //Do you see where I'm going with this?
    }
}

public class Main {
    public static void Main(String args[]) {
        ExampleSingleton myData = ExampleSingleton.getInstance();
        myData.setInitialData(. . .);

        MyGui1 = new MyGui1();
        MyGui2 = new MyGui2();

        //Do more stuff here
    }
}

由于两个GUI对象都使用相同的单例,因此两者都可以使用这些数据。

答案 4 :(得分:0)

你的问题有点模糊;有很多方法可以解决这个问题,这是一个例子。

public class MyData()
{
   ...my data
}

public class ViewOne extends JFrame
{
   MyData myData = new MyData;
}

public class ViewTwo extends JFrame
{
   MyData myData = new MyData;
}

答案 5 :(得分:0)

您可以通过两种方式实现:

  1. 创建两个GUI可以访问的通用可访问数据(即单例)
  2. 将数据传递给GUI
  3. 
        Data theData = new Data();
        GUIObject object1 = new GUIObject();
        GUIObject object2 = new GUIObject();
        object1.setData(data);
        object2.setData(data);