Есть ли способ динамически изменить, какой атрибут метод toString отображает для пользовательских классов?

1

Я создаю JList в программе Java GUI, которая будет заполнена обычным классом SteamFriends через ArrayList, называемый friendsList:

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() возвращает имя friendName объекта SteamFriend, но мне интересно, можно ли ее изменить, чтобы я мог контролировать, какой атрибут он возвращает, и какова наилучшая практика для него.

Если я хочу заполнить JList списком SteamFriends, который сортируется по возрасту (например), то как бы изменить метод toString() для отображения возраста? Может быть, через статическую переменную (public static int variableToDisplay) в объекте SteamFriend?

Теги:

1 ответ

3
Лучший ответ

Лучше не использовать toString() для отображения данных пользователю, а лучше использовать его как инструмент отладки. Для JLists я рекомендую вам вместо этого использовать собственный визуализатор ячеек, который вы написали, чтобы отобразить именно ту информацию, которую вы хотите.

например, для одного, который я использовал в программе,

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);
   }
}
  • 0
    Идет ли это как-то при инициализации компонента JList или он входит в пользовательский класс и автоматически вызывается, когда он включается в JList?
  • 1
    @FedericoPettinella: для JList API вы вызываете setCellRenderer(...) для JList и передаете свой рендерер: myList.setCellRenderer(new MyCellRenderer());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню