Java Swing,Corba对象-如何在DefaultListModel中存储Corba对象?
我有这样的IDL接口: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
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是一个数据传输对象。它只是返回包含用户信息的数据结构,而不是返回对远程用户对象的引用。例如,见。