Проблема с отображением компонентов JList - PullRequest
2 голосов
/ 12 апреля 2011

Я пытаюсь воспроизвести временную шкалу твиттера в компоненте Jlist.Я уже зафиксировал размер моего фрейма, а также высоту и ширину ячейки JList с помощью следующего кода.

jlist.setFixedCellHeight(50);
jlist.setFixedCellWidth(70);

Я считаю, что высота и ширина каждой ячейки в порядке, но если содержимоетвита внутри ячейки превышает ширину, в которой не отображается дальнейшая часть твита.

Например: предположим, что ширина 70 точно соответствует твиту "Я хороший"

Предположим, если твит равен "Я хороший и замечательный" Твит получаетотображается как «Я в порядке .....» Превышенная часть твита не отображается.

Здесь я хочу, чтобы оставшаяся часть твита отображалась ниже строки, поскольку у меня достаточно высоты, чтобы отобразить твит во второй строке.В том же примере в ячейке я хочу, чтобы содержимое отображалось в виде

«У меня все хорошо

и отлично»

Как мне этого добиться?

Ответы [ 3 ]

1 голос
/ 12 апреля 2011

вам нужен пользовательский ListCellRenderer, который возвращает компонент, который поддерживает несколько строк текста.Средство рендеринга по умолчанию возвращает JLabel с одной строкой.Вы можете реализовать рендер, который возвращает JTextArea

1 голос
/ 13 апреля 2011

Как сказала Клеопатра,

Нам нужен пользовательский ListCellRenderer, который возвращает компонент, который поддерживает несколько строк текста. Средство рендеринга по умолчанию возвращает JLabel с одной строкой. Нам нужно создать такой рендерер, который возвращает JTextArea, который может переносить несколько строк внутри него. Ниже приведен простой код для этого.

public class CustomListRenderer implements ListCellRenderer {

   @Override
   public Component getListCellRendererComponent(JList list, Object value, int index,
        boolean isSelected, boolean cellHasFocus) {

        JTextArea renderer = new JTextArea(3,10);
        renderer.setText(value.toString());
        renderer.setLineWrap(true);
        return renderer;
   }
}

Нам нужно добавить следующую строку, чтобы установить средство визуализации ячеек в jlist.

jlist.setCellRenderer(new CustomListRenderer());
0 голосов
/ 12 апреля 2011

цитирование из JList java doc

JList не реализует прокрутку напрямую.Чтобы создать прокручиваемый список, сделайте его представлением окна просмотра JScrollPane.Например:

JScrollPane scrollPane = new JScrollPane (myList);

// Или в два этапа: JScrollPane scrollPane = new JScrollPane ();scrollPane.getViewport (). setView (myList);

...