Отображение PopupMenu в JComboBox

190
31 марта 2017, 22:39

При создании JComboBox и использовании своего компонента для рендера, некорректно отображается popupmenu до первого выбора:

Как только первый выбор сделан, все нормализуется:

Мой рендер:
class PanelShow extends JPanel { private JLabel name; private JLabel text;

private LevelBar rating;
private JLabel voices;
public PanelShow(Enty enty)
{
    ImageIcon defaultIcon = new ImageIcon(getClass().getResource("/ru/ezhov/test/example/31g.png"));
    name = new JLabel("<html><b>" + enty.getName() + "</b>");
    name.setMaximumSize(new Dimension(40, 100));
    name.setMinimumSize(new Dimension(40, 100));
    name.setPreferredSize(new Dimension(40, 100));
    name.setHorizontalAlignment(SwingConstants.CENTER);
    text = new JLabel("<html>" + enty.getDep());
    text.setMaximumSize(new Dimension(200, 100));
    text.setMinimumSize(new Dimension(200, 100));
    text.setPreferredSize(new Dimension(200, 100));
    voices = new JLabel(enty.getVoicesText());
    ImageProducer ip = defaultIcon.getImage().getSource();
    List<ImageIcon> list = Arrays.asList(
            makeStarImageIcon(ip, 1f, .5f, .5f),
            makeStarImageIcon(ip, .5f, 1f, .5f),
            makeStarImageIcon(ip, 1f, .5f, 1f),
            makeStarImageIcon(ip, .5f, .5f, 1f),
            makeStarImageIcon(ip, 1f, 1f, .5f));
    rating = new LevelBar(defaultIcon, list, enty.getRating());
    rating.repaintIcon(enty.getRating());
    setLayout(new GridLayout(1, 3));
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
    panel.setPreferredSize(new Dimension(200, 100));
    panel.setMinimumSize(new Dimension(200, 100));
    panel.setMaximumSize(new Dimension(200, 100));
    panel.add(name);
    panel.add(text);
    add(panel);
    add(rating);
    add(voices);
    setPreferredSize(new Dimension(100, 100));
    setMinimumSize(new Dimension(100, 100));
    setMaximumSize(new Dimension(100, 100));
}
Answer 1

Нашел ошибку:
изначально JComboBox создавался так:

Enty[] entys =
{
    new Enty(),
    new Enty(),
    new Enty(),
    new Enty()
};
JXComboBox comboBox = new JXComboBox(entys);
comboBox.setRenderer(new LSR());

переписал на:

Enty[] entys =
{
    new Enty(),  
    new Enty(),
    new Enty(),
    new Enty()
};
JXComboBox comboBox = new JXComboBox();
comboBox.setRenderer(new LSR());
comboBox.setModel(new DefaultComboBoxModel(entys));

все заработало.

READ ALSO
Зачем нужны произвольные теги

Зачем нужны произвольные теги

ЗдравствуйтеПодскажите пожалуйста, на некоторых сайтах встречаю произвольные теги

284
Формы с одинаковым id на странице

Формы с одинаковым id на странице

Добрый день, есть задача выводить сообщения(коменты) на страницуВывожу их циклом:

207
Полоса загрузки html, css

Полоса загрузки html, css

Видел, что есть тэг в HTML5 progress, но увы его нельзя стилизовать

864
Иконка вышла за пределы блока и пропала

Иконка вышла за пределы блока и пропала

В шапке есть иконка (картинкой)После добавление flexbox в шапку проекта она исчезла, я так понял вышла за пределы блока

270