Java Swing List получает тип объекта параметра - PullRequest
0 голосов
/ 20 октября 2018

Я только начинаю с Java-кодирования и на самом деле пытаюсь создать простое приложение в разгаре - с двумя полями comboBox, содержащими несколько столбцов (каждый комбо имеет свой список).

Я изучаю решение, представленное в stackoverflow, и создаюкод ниже.Это работает, но только для одного типа списка.Я хочу создать более универсальный код, чтобы обрабатывать в одном классе более одного типа списка.Могу ли я получить тип List и обработать в одном классе два разных ComboBox List, или я должен искать другие варианты, чтобы сделать это.Я очень благодарен, чтобы дать мне совет, или дать лучшее решение (возможно, я ошибаюсь, и это лучшее решение для этого).

Мой код:

import java.awt.Component;
import java.util.List;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;

public class MyComboBox extends JComboBox {

    static final long serialVersionUID = 1L;

    public MyComboBox(List<?> list) {
        super(list.toArray());

        if (!list.isEmpty()) {
            this.setRenderer(new ComboCustomRender());

        }

    }

    private class ComboCustomRender extends DefaultListCellRenderer {

        static final long serialVersionUID = 1L;

        @Override
        public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,
                boolean cellHasFocus) {
            JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            Foo foo = (Foo) value;
            label.setText(foo.getField1() + foo.getField2);
            return label;
        }
    }
}

1 Ответ

0 голосов
/ 21 октября 2018

Хорошо, я понял свою ошибку и нашел решение для этого.Мне не нужен класс расширяет JComboBox, но только класс с реализацией getListCellRendererComponent (), где я могу написать класс для обработки каждого типа списка.Второе решение - переопределить метод toString () в каждом классе, который я использую в списке, и затем не нужно приводить объект - только возвращаемый метод toString ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...