ListCellRenderer — JLabel — строка — n строк

Итак, у меня такая ситуация:

У меня есть JList, который отображает кучу строк.

Однако эти строки очень длинные, а JList очень узкий. Это означает, что струны не подходят.

Я хочу сделать так, чтобы каждая запись имела две строки, например:

|Word word word  |
|word word wor...|

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

На самом деле не имеет значения, что я делаю, важно то, что я должен использовать FontMetrics для измерения всех этих вещей, чтобы я мог заставить их работать. И в этом загвоздка.

Пока весь метод getListCellRendererComponent(...) не будет выполнен, компонент не будет окрашен, поэтому не будет графики, что сделает невозможным любое измерение шрифта.

Как мне обойти это?

P.S. Мне нужно использовать JLabel для визуальных эффектов.


person Karlovsky120    schedule 20.09.2013    source источник


Ответы (2)


компонент не будет окрашен, поэтому не будет графики, что сделает невозможным любое измерение шрифта.

Вам не нужна графика, чтобы использовать FontMetrics.

См. Left Dot Renderer, который используется для JTable, но концепции должны быть одинаковыми и для средства визуализации списка.

person camickr    schedule 20.09.2013

Вам нужно использовать JLabels? Было бы намного проще, если бы getListCellRendererComponent() возвращал JTextArea, высота которого была установлена ​​​​на 2 строки, а для setLineWrap() и setWrapStyleWord() были установлены значения true. Сделайте JTextArea нередактируемым, и он будет выглядеть как двухстрочный JLabel.

person NRitH    schedule 20.09.2013