Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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 有没有办法动态更改toString方法为自定义类显示的属性?_Java - Fatal编程技术网

Java 有没有办法动态更改toString方法为自定义类显示的属性?

Java 有没有办法动态更改toString方法为自定义类显示的属性?,java,Java,我正在Java GUI程序中创建一个JList,该程序将通过名为friendsList的ArrayList填充自定义的“SteamFriends”类: friendsListJList.setModel(new javax.swing.AbstractListModel() { SteamFriend[] friendListArr = friendsList.toArray(new SteamFriend [0]); public int getSize() { return

我正在Java GUI程序中创建一个JList,该程序将通过名为friendsList的ArrayList填充自定义的“SteamFriends”类:

friendsListJList.setModel(new javax.swing.AbstractListModel() {
    SteamFriend[] friendListArr = friendsList.toArray(new SteamFriend [0]);
    public int getSize() { return friendListArr.length; }
    public SteamFriend getElementAt(int i) { return friendListArr[i]; }
});
现在,toString()函数返回SteamFriend对象的friendName,但我想知道是否可以更改它,以便控制它返回的属性以及最佳做法


如果我想用按年龄排序的朋友列表(例如)填充JList,那么如何更改toString()方法以显示年龄?通过SteamFriend对象中的静态变量(public static int variableToDisplay),也许?

最好不要使用
toString()
向用户显示数据,而是最好将其用作调试工具。对于JLists,我建议您改用自定义单元格渲染器,该渲染器是您编写的,用于准确显示所需信息的渲染器

e、 g.我在一个程序中用过一个

class LabelTextPairListRenderer extends DefaultListCellRenderer {
   @Override
   public Component getListCellRendererComponent(JList<?> list, Object value,
         int index, boolean isSelected, boolean cellHasFocus) {
      LabelTextPairList labelTextPairList = (LabelTextPairList) value;
      if (labelTextPairList == null) {
         value = "";
      } else {
         value = labelTextPairList.getName();
      }
      return super.getListCellRendererComponent(list, value, index, isSelected,
            cellHasFocus);
   }
}
类LabelTextPairListRenderer扩展了DefaultListCellRenderer{
@凌驾
公共组件GetListCellRenderComponent(JList列表、对象值、,
整型索引,布尔型isSelected,布尔型cellHasFocus){
LabelTextPairList LabelTextPairList=(LabelTextPairList)值;
如果(labelTextPairList==null){
value=“”;
}否则{
value=labelTextPairList.getName();
}
返回super.getListCellRenderComponent(列表、值、索引、isSelected、,
细胞聚焦);
}
}

这是以某种方式进入JList组件的初始化还是进入自定义类并在包含在JList中时自动调用?@FedericoPettinella:根据,在JList上调用
setCellRenderer(…)
并传入渲染器:
myList.setCellRenderer(new MyCellRenderer())