Если вы решили использовать интерфейс ListCellRender, вы должны реализовать весь эффект, поэтому для пояснения ListCellRender является компонентом (пример JLabel) для установки значения и всего прослушивателя (в этом случае вы добавляете прослушиватель внутри компонента)
Таким образом, в вашем решении компонент выбирается, но ваш код не рисует его, а моя реализация вас CellRender
private class MyCellRenderer extends JTextArea implements ListCellRenderer{
private JPanel p;
private JPanel linePanel;
private JLabel lineLabel;
public MyCellRenderer() {
p = new JPanel();
p.setLayout(new BorderLayout());
linePanel = new JPanel(new BorderLayout());
linePanel.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
lineLabel = new JLabel("Test");
linePanel.add(lineLabel, BorderLayout.NORTH);
p.add(linePanel, BorderLayout.WEST);
this.setLineWrap(true);
this.setWrapStyleWord(true);
p.add(this, BorderLayout.CENTER);
}
public Component getListCellRendererComponent(final JList list,
final Object value, final int index, final boolean isSelected,
final boolean hasFocus) {
if(isSelected){
this.setBackground(Color.BLUE);
}else{
this.setBackground(Color.GRAY);
}
this.setText((String) value);
int width = list.getWidth();
// this is just to lure the ta's internal sizing mechanism into action
if (width > 0) {
this.setSize(width, Short.MAX_VALUE);
}
return this;
}
}
Результат -
Как я могу получить возможность выбора каждой строки? или Вы предлагаете использовать другой компонент для переноса текстов внутри JList?
для ответа на наш запрос, мой ответ будет зависит
Если вам нужнотолько визуальный эффект, я думаю, что это хорошее решение, DefaultListCellRenderer
не удалось несколько строк.