Проблема в следующем:
Есть JList и в нём в качестве элементов помещаются картинки (небольшие превьюшки). Основной вопрос в отображении элементов списка. При задании собственного ListCellRenderer'a и реализации методов
public class PhotoListCellRenderer extends JPanel implements ListCellRenderer{
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus){
// ......
photo = (BufferedImage) value;
}
public void paintComponent(Graphics g){
g.drawImage(photo, 0, 0,
this.getWidth(),
this.getHeight(), null);
Картинки отображаются, но ширина/высота ячеек такая как будто там отображаются строчки текста (т.е. высота очень маленькая примерно 9 кегль стандартного шрифта).
Если же задать фиксированно в объекту класса JList'а
photoList.setFixedCellHeight(someHeightInt);
photoList.setFixedCellWidth(someWidthInt);
то ячейки отображаются нормально. Вопрос в следующем что нужно допереопределить (ну или так: что нужно вообще) для того что размер вычислялся нормально автоматически (при отображении компонента)?
Здравствуйте, Zelgadis, Вы писали:
Z>Картинки отображаются, но ширина/высота ячеек такая как будто там отображаются строчки текста (т.е. высота очень маленькая примерно 9 кегль стандартного шрифта).
Z>Если же задать фиксированно в объекту класса JList'а
Z>то ячейки отображаются нормально. Вопрос в следующем что нужно допереопределить (ну или так: что нужно вообще) для того что размер вычислялся нормально автоматически (при отображении компонента)?
А может быть проще в getListCellRendererComponent() возвращать например JLabel с setIcon(photo). У JLabel можно выставить размеры. Как-то так...
Излишнее цитирование порезано. Автор отправлен в бан. Blazkowicz
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Zelgadis, Вы писали:
Z>Проблема в следующем:
Z>Есть JList и в нём в качестве элементов помещаются картинки (небольшие превьюшки). Основной вопрос в отображении элементов списка.
Тебе нужно переопределить рендерер ячеек JList, наследуя его от JLabel. В лабле есть метод установки иконок.
Что потребуется:
т.к. рендереры в ява являются по иднологии приспособленцами, т.е. не множатся для каждой ячейки, то следовательно во внешнем машшиве или массиве в классе рендерера необходимо хранить картинки и соответственно написать методы типа setIcon(int row, ImageIcon icon) и removeIcon(int row), где row — строка листа.
После написания такого класса с помощью метода setCellRenderer() у листа подменяешь стандартный рендерер.
Если есть вопросы по реализации — пиши