Java JList нежелательное преобразование toString () - PullRequest
2 голосов
/ 05 марта 2012

Мой JList, который я расширил, чтобы позволить пользователю перетаскивать и изменять его порядок (используется Изменение порядка JList с помощью Drag-and-Drop и Использование перетаскивания для изменения порядка списка ) но это дает мне странный результат.Вместо того, чтобы давать мне мой пользовательский JComponent, он дает мне .toString() его значение.Я установил модель моего пользовательского JList на DefaultListModel<JComponent>, думая, что это сработает, но это не сработало.

1 Ответ

5 голосов
/ 05 марта 2012

Вам необходимо создать пользовательский CellRenderer для объекта, который вы хотите визуализировать.По умолчанию JList покажет значение toString компонента (поскольку DefaultListCellRenderer расширяет JLabel).

class MyRenderer extends DefaultListCellRenderer {
   public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
      Component c = super.getListCellRendererComponent(...);
      setText(getValue(value)); // where getValue is some method you implement that gets the text you want to render for the component
      return c;
}

Если вы не хотите отображать строку, создайте реализацию CellRenderer, которая возвращает компонент, который выхочу сделать.

...