2015-03-28 4 views
1

Я создаю JList в программе Java GUI, которая будет заполнена с пользовательскими «SteamFriends» класса через ArrayList под названием friendsList:Есть ли способ динамически изменить атрибут toString для пользовательских классов?

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?

ответ

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: в [API JList] (http://docs.oracle.com/javase/8/docs/api/javax/swing/JList.html) вы вызываете 'setCellRenderer (...)' на JList и перейдите в средство визуализации: 'myList.setCellRenderer (новый MyCellRenderer()); –

Смежные вопросы