的Java Swing,CORBA对象 - 如何存储的Corba在DefaultListModel对

2019-10-17 07:15发布

我有这样的IDL接口:

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

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

};

当我把它翻译为C ++我有这样的某物:

// ...
Group::Users* GroupImpl::getUsers()
{
    // ..return sequence of 'User'-objects
}

在客户端(Java编写的),我想告诉我的用户。 我折腾这样的:

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);
    }
}

this.usersList是一个JList

当我这样做,像我写的,我看我的用户对象的唯一的IOR:

IOR :0123405948239481293812312903891208320131293812381023
IOR: 0092930912617819919191818173666288810010199181919919

等等 ...

如何使这样的说法,看到自己的toString(); 在DefaultListModel代表性? 我不想这样做:

model.addElement(users[i].toString());

那不是问题的关键。 当我使用RMI代替CORBA, model.addElement(users[i]); 这正是我需要的,因为我看到的用户字符串表示。 但我需要使用CORBA和存储在DefaultListModel CORBA的用户对象 ,而不是字符串。 请帮忙。

Answer 1:

做到这一点的方法之一是使一个用户视图类,它的情况下,你会把在列表模式:

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 Nizet指出,要小心你放的toString(),因为它被称为每一个列表需要显示的时间码 - 还是最新鲜的数据的表现可能正是你想要的。



Answer 2:

我想存根的toString()方法实际上并不调用远程CORBA对象的toString()方法。 尝试使用另一种方法的名称(如getName()并使用它调用该方法的自定义呈现。

这就是说,是不是真的到用户的远程CORBA对象模型是一个好主意? 这会造成很多或远程方法调用只显示用户的姓名,并thse方法调用基本上是你无法控制的,因为Swing组件将使他们。 你不应该使用DTO的呢?



文章来源: Java Swing, Corba Objects - How to store Corba objects in DefaultListModel?