Я создаю 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?
Лучше не использовать 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);
}
}
setCellRenderer(...)
для JList и передаете свой рендерер:myList.setCellRenderer(new MyCellRenderer());