У меня есть горизонтально расположенный JList. Все элементы в списке имеют значительно разные размеры, и по умолчанию рендеринг масштабирует каждый элемент до размера самого большого элемента в списке. Я попытался реализовать собственный рендеринг следующим образом, но каждый элемент в списке остается того же размера. Любой совет?JList Индивидуальные размеры
Ниже приводится ListCellRenderer:
package ui.wizards;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.SwingConstants;
public class WizHistoryCellRenderer extends JLabel
implements ListCellRenderer<String>
{
private static final long serialVersionUID = -3650608268225337416L;
JList<? extends String> list;
@Override
public Component getListCellRendererComponent(JList<? extends String> list,
String value, int index, boolean isSelected, boolean cellHasFocus)
{
this.list = list;
int width = this.getFontMetrics(this.getFont())
.stringWidth((String) value);
int height = 20;
setText(value);
if (list != null)
{
if (index == list.getSelectedIndex())
showSelected();
else
showUnselected();
}
setMaximumSize(new Dimension((int) (1.1 * width), height));
setPreferredSize(new Dimension((int) (1.1 * width), height));
setHorizontalAlignment(SwingConstants.CENTER);
setOpaque(true);
return this;
}
private void showSelected()
{
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
}
private void showUnselected()
{
setBackground(list.getBackground());
setForeground(list.getForeground());
}
}
Я попытался вызвать setFixedCellHeight (-1) и setFixedCellWidth (-1) как до, так и после вызова setListCellRenderer(), но ни один из них не повлиял. – Bryant