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

时间:2015-03-28 15:16:21

标签: java

我正在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,但我想知道是否可以更改它以便我可以控制它返回的属性以及它的最佳实践。

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

1 个答案:

答案 0 :(得分:3)

最好不要使用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);
   }
}