/*
 * 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.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JPanel;

/**
 *
 * @author Cássio Conceição
 * @since 24/09/2019
 * @version 1909
 * @see http://ctecinf.com.br/
 */
public class ComboBoxEditor extends JPanel implements javax.swing.ComboBoxEditor {

    private final JFormattedTextField field;
    private final JButton button;

    public ComboBoxEditor() {

        field = new JFormattedTextField();
        field.setEditable(false);

        //button = new JButton(Image.parse(Image.CLOSE_TAB));
        button = new JButton("X");
        button.setMargin(new Insets(1, 1, 1, 1));
        button.setOpaque(false);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                field.setValue(null);
            }
        });

        setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();

        gbc.weightx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;

        add(field, gbc);

        gbc.weightx = 0;
        gbc.fill = GridBagConstraints.NONE;
        gbc.gridx++;

        add(button, gbc);
    }

    @Override
    public Component getEditorComponent() {
        return this;
    }

    @Override
    public void addNotify() {
        super.addNotify();
        field.requestFocusInWindow();
    }

    @Override
    public void setItem(Object anObject) {
        field.setValue(anObject);
    }

    @Override
    public Object getItem() {
        return field.getValue();
    }

    @Override
    public void selectAll() {
        field.selectAll();
    }

    @Override
    public void addActionListener(ActionListener listener) {
        field.addActionListener(listener);
    }

    @Override
    public void removeActionListener(ActionListener listener) {
        field.removeActionListener(listener);
    }

}
