Я работаю с JList, в котором есть пользовательское средство визуализации ячеек. Это средство визуализации ячеек:
public class DefaultOriginalPublisherListRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof OriginalPublisher) {
OriginalPublisher op = (OriginalPublisher) value;
String text = op.getName();
if (index > -1) {
text = "<html><b>" + op.getName() + "</b><br/><small>" + op.getIpi() + "</small></html>";
}
return super.getListCellRendererComponent(list, text, index, isSelected, cellHasFocus);
} else {
return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
}
}
}
Все, что он делает, это делает несколько изменений в тексте при расширении списка. В противном случае он ничего не делает.
Следует добавить, что приложение работает с L & F по умолчанию для данной системы / ОС, в которой выполняется приложение. В моей системе рендерер ячейки по умолчанию - class javax.swing.plaf.synth.SynthComboBoxUI$SynthComboBoxRenderer
. Это средство визуализации ячеек, которое я заменяю приведенным выше средством визуализации.
JList, к которому применяется средство визуализации, выглядит следующим образом. Вы можете видеть, что высота намного меньше, чем у компонента выше:
То, что я хотел бы, чтобы высота была, это. Это высота по умолчанию, когда средство визуализации ячеек не используется:
Как я могу гарантировать, что высота JList, даже с пользовательской ячейкой рендер применен, остается по умолчанию?
Вот SSCCE:
package test;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class CellRendererTest {
private final JFrame f;
public CellRendererTest() {
f = new JFrame();
init(f);
}
public void show() {
f.setPreferredSize(new Dimension(640, 480));
f.pack();
f.setVisible(true);
}
private void init(JFrame f) {
JPanel p = new JPanel();
f.add(p);
JComboBox defaultRendererCb = new JComboBox();
p.add(defaultRendererCb);
JComboBox customRendererCb = new JComboBox();
customRendererCb.setRenderer(new DefaultOriginalPublisherListRenderer());
p.add(customRendererCb);
DefaultComboBoxModel m = new DefaultComboBoxModel();
m.addElement(new OriginalPublisher("Test 1", "12345"));
m.addElement(new OriginalPublisher("Test 1", "67890"));
defaultRendererCb.setModel(m);
customRendererCb.setModel(m);
}
private class DefaultOriginalPublisherListRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof OriginalPublisher) {
OriginalPublisher op = (OriginalPublisher) value;
String text = op.getName();
if (index > -1) {
text = "<html><b>" + op.getName() + "</b><br/><small>" + op.getNumber() + "</small></html>";
}
return super.getListCellRendererComponent(list, text, index, isSelected, cellHasFocus);
} else {
return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
}
}
}
private class OriginalPublisher {
private final String name;
private final String number;
public OriginalPublisher(String name, String number) {
this.name = name;
this.number = number;
}
public String getName() {
return name;
}
public String getNumber() {
return number;
}
}
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
CellRendererTest t = new CellRendererTest();
t.show();
}
}