ArrayList в JList и отображение определенного свойства объектов - PullRequest
0 голосов
/ 09 октября 2019

Я хотел бы знать, есть ли способ отобразить определенное свойство для элементов JList, когда оно построено из ArrayList.

Я просто хочу выбрать свойство, котороебудет отображаться в списке, когда я сделаю это:

JList<String> elementsList = new JList(elementsArrayList.toArray());
elementsScrollPane.setViewportView(elementsList);

Спасибо за любую помощь или ссылки, которые вы можете мне дать!

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Вы можете установить ListCellRenderer.

По сути, вы пишете функцию

public Component getListCellRendererComponent(JList<?> list,
    Object value, int index, boolean isSelected, boolean cellHasFocus)

, которая возвращает Component. Чтобы упростить задачу, вы можете расширить DefaultListCellRenderer и вызвать его реализацию после того, как вы извлекли значение, которое вы хотите отобразить из элемента списка, т.е.

{
    if (value instanceof YourClass) {
        YourClass ob = (YourClass) value;
        return super.getListCellRendererComponent(list, ob.getProperty(), index, isSelected, cellHasFocus);
    }
    return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
}

Затем вы установите ваш рендерер на ваш elementList.

1 голос
/ 09 октября 2019

1.

Самый простой способ - это

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

String[] properties = elementsArrayList.stream().map(element::getStringProperty).toArray()

Затем использовать его как входмодель для управления свингом новый JList (свойства)

Канонический Swing-подобный

определяет JList на основе имеющихся у вас исходных объектов (через ListModer или как есть, с помощью массива)

new JList(elementsArrayList)

изатем создайте свой класс ListCellRenderer, который будет отображать интересующее вас свойство в виде ярлыка, и установите для этого средства визуализации список

jList.setCellRenderer(youCellRedererInstance)
...