JCombobox com botão para cadastro, é possível?

E aí, galerinha do GUJ, tudo bem?
Tô tentando visualizar um método de fazer uma JComboBox com um botão, logo acima da setinha de pesquisa, que possibilite alguma ação, seja abrir um formulário, seja qualquer outra ação, mas não consigo colocar isso em código. Alguém já fez? Conhece algum jeito? Conhece algum componente pronto?

Anexa ao tópico está uma imagem que representa o que eu quero.

Valeu, galera,
fiquem com Deus! :smiley:

um JTextField + um JButton???

E como o JTextField se comportaria como uma JComboBox?

Não tenho a mínima idéia se tem algum jeito fácil de se fazer isso. Mas tava eu aqui sem fazer nada e resolvi fazer um esboço aqui.
É lógico que este código tá super porco, mas só pra mostrar que é possível fazer. Se bem que vai dar um trabalhinho hahahaha.
Com certeza deve haver outros jeitos melhores de se fazer isso. =P
To até com vergonha de postar isso, mas taí. hehehehe

PS: O FormLayout é o layout do JGoodies.

public class MyComboBox extends JPanel{

    private JTextField combo;
    private JButton btnPopup;
    private JButton btnOtherAction;
    private JPanel pnlBtns;
    private JPopupMenu popupMenu;

    private List<Object> lstItems;
    private boolean isPopupOpened;

    public MyComboBox() {
        init();
    }

    private void init() {
        lstItems = new ArrayList<Object>();
        popupMenu = new JPopupMenu();
        JMenuItem item = new JMenuItem("Teste");
        popupMenu.add(item);
        lstItems.add(item);
        item = new JMenuItem("Teste1");
        popupMenu.add(item);
        lstItems.add(item);
        FormLayout layout = new FormLayout("30dlu, pref, 1dlu, pref",
                                           "30dlu, pref");
        setLayout(layout);
        CellConstraints cc = new CellConstraints();
        add(getTxtCombo(), cc.xy(2, 2));
        add(getPainelBtns(), cc.xy(4, 2));
    }

    private JPanel getPainelBtns() {
        if (pnlBtns == null) {
            FormLayout layout = new FormLayout("pref", "pref, 1dlu, pref");
            pnlBtns = new JPanel(layout);
            CellConstraints cc = new CellConstraints();

            pnlBtns.add(getBtnPopup(), cc.xy(1, 1));
            pnlBtns.add(getBtnOtherAction(), cc.xy(1, 3));
        }
        return pnlBtns;
    }

    private JTextField getTxtCombo() {
        if (combo == null) {
            combo = new JTextField();
            combo.setPreferredSize(new Dimension(100, 25));
            combo.setEditable(false);
            combo.setOpaque(false);
            combo.setBackground(Color.WHITE);
        }
        return combo;
    }

    private JButton getBtnPopup() {
        if (btnPopup == null) {
            btnPopup = new JButton("v");
            btnPopup.setPreferredSize(new Dimension(10, 11));
            btnPopup.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    if (!isPopupOpened) {
                        popupMenu.setPopupSize(getTxtCombo().getWidth(), lstItems.size()*20);
                        popupMenu.show(getTxtCombo(), 0, getTxtCombo().getHeight());
                        popupMenu.setAutoscrolls(true);
                        isPopupOpened = true;
                    } else {
                        popupMenu.setVisible(false);
                        isPopupOpened = false;
                    }
                }
            });
        }
        return btnPopup;
    }

    private JButton getBtnOtherAction() {
        if (btnOtherAction == null) {
            btnOtherAction = new JButton("...");
            btnOtherAction.setPreferredSize(new Dimension(10, 11));
        }
        return btnOtherAction;
    }

    public void addItem(Object item) {
        JMenuItem itemMenu = new JMenuItem(item.toString());
        popupMenu.add(itemMenu);
        lstItems.add(item);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setLayout(new FlowLayout());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(new Dimension(500, 200));
        final MyComboBox cmb = new MyComboBox();
        cmb.addItem("teste3");
        f.add(cmb);
        JButton b = new JButton("novo");
        b.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                cmb.addItem("item4");
            }
        });
        b.setPreferredSize(new Dimension(30, 20));
        f.add(b);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        f.pack();
    }
}