/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ctecinf.combobox;

import java.util.List;
import javax.swing.JComboBox;
import javax.swing.plaf.metal.MetalLookAndFeel;

/**
 *
 * @author Cássio Conceição
 * @param <T>
 * @since 24/09/2019
 * @version 1909
 * @see http://ctecinf.com.br/
 */
public class ComboBox<T> extends JComboBox<T> {

    public ComboBox() {
        this(new ComboBoxModel());
    }

    public ComboBox(T[] data) {
        this(new ComboBoxModel(data));
    }

    public ComboBox(List<T> data) {
        this(new ComboBoxModel(data));
    }

    public ComboBox(ComboBoxModel<T> aModel) {

        super(aModel);

        setRenderer(new ComboBoxToolTipRenderer());
        setBackground(MetalLookAndFeel.getWhite());

        if (aModel.getWidth() > 23) {
            T obj = (T) "XXXXXXXXXXXXXXXXXXXXXXX";
            setPrototypeDisplayValue(obj);
        }
    }

    @Override
    public ComboBoxModel<T> getModel() {
        return (ComboBoxModel<T>) super.getModel();
    }

    @Override
    public void addItem(T item) {
        getModel().addElement(item);
    }

    @Override
    public void removeItem(Object anObject) {
        getModel().removeElement(anObject);
    }

    @Override
    public void removeItemAt(int anIndex) {
        getModel().removeElementAt(anIndex);
    }

    @Override
    public void setSelectedItem(Object anObject) {
        getModel().setSelectedItem(anObject);
    }
}
