Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing,Corba对象-如何在DefaultListModel中存储Corba对象?_Java_C++_Swing_Corba_Defaultlistmodel - Fatal编程技术网

Java Swing,Corba对象-如何在DefaultListModel中存储Corba对象?

Java Swing,Corba对象-如何在DefaultListModel中存储Corba对象?,java,c++,swing,corba,defaultlistmodel,Java,C++,Swing,Corba,Defaultlistmodel,我有这样的IDL接口: interface User { string toString(); //.. }; interface Group { typedef sequence<User> Users; Users getUsers(); }; 在客户端(用Java编写),我想向我的用户展示。我这样做: // ... Group::Users* GroupImpl::getUsers() { // ..return sequence

我有这样的IDL接口:

interface User
{
    string toString();
    //..
};

interface Group
{
    typedef sequence<User> Users;
    Users getUsers();

};
在客户端(用Java编写),我想向我的用户展示。我这样做:

// ...
Group::Users* GroupImpl::getUsers()
{
    // ..return sequence of 'User'-objects
}
public void showAllUsers() 
{
    User[] users = interface_obj.getUsers();
    if(users.length != 0)
    {
        DefaultListModel model = new DefaultListModel();
        for(int i=0; i<users.length; i++)
            model.addElement(users[i]);
        this.usersList.setModel(model);
    }
}
等等

如何做到这一点,看到他们的toString();DefaultListModel中的表示?我不想这样做:

model.addElement(用户[i].toString())

这不是重点。当我使用RMI代替CORBA时,
model.addElement(users[I])正是我所需要的,因为我看到了用户的字符串表示。
但我需要使用CORBA并将其存储在DefaultListModel CORBA用户-对象中,而不是字符串中。请帮忙。

我猜存根的toString()方法实际上并没有调用远程CORBA对象的toString()方法。尝试使用另一个方法名(如
getName()
),并使用调用此方法的自定义呈现程序

也就是说,将用户建模为远程CORBA对象真的是个好主意吗?这将导致大量或远程方法调用只显示用户的名称,而这些方法调用基本上是您无法控制的,因为Swing组件将使它们发生变化。您不应该改用DTO吗?

我想存根的toString()方法实际上并没有调用远程CORBA对象的toString()方法。尝试使用另一个方法名(如
getName()
),并使用调用此方法的自定义呈现程序


也就是说,将用户建模为远程CORBA对象真的是个好主意吗?这将导致大量或远程方法调用只显示用户的名称,而这些方法调用基本上是您无法控制的,因为Swing组件将使它们发生变化。您不应该改用DTO吗?

一种方法是创建一个UserView类,将其实例放入列表模型中:

public class UserView {

    private final User corbaUser;

    public UserView(User corbaUser) {
        this.corbaUser = corbaUser
    }

    @Override
    public String toString() {
       String ret = null;
       // construct the string as you want here
       return ret;
    }
}
编辑:


正如JB所指出的,不要对放入toString()中的代码过于小心,因为每次需要显示列表时都会调用它,否则最新数据的显示可能正是您想要的

一种方法是创建一个UserView类,将其实例放入列表模型中:

public class UserView {

    private final User corbaUser;

    public UserView(User corbaUser) {
        this.corbaUser = corbaUser
    }

    @Override
    public String toString() {
       String ret = null;
       // construct the string as you want here
       return ret;
    }
}
编辑:


正如JB所指出的,不要对放入toString()中的代码过于小心,因为每次需要显示列表时都会调用它,否则最新数据的显示可能正是您想要的

你能再写一些关于DTO的内容吗?我以前从未听说过这个术语,如何使用它?DTO是一个数据传输对象。它只是返回包含用户信息的数据结构,而不是返回对远程用户对象的引用。请参阅示例。您可以再写一些关于DTO的内容吗?我以前从未听说过这个术语,如何使用它?DTO是一个数据传输对象。它只是返回包含用户信息的数据结构,而不是返回对远程用户对象的引用。例如,见。