Renderizar ComboBox

Estou precisando fazer com que ao apertar qualquer letra do alfabeto dentro do jComboBox render ele set a o item correspondente a letra teclada. Exemplo: JComboBox com nacionalidade, Aperto a letra B, ele vai direto para o primeiro item com a letra B. (exemplo, Brasil).

No ComboBox default (ou seja o normal, sem utilizar o render) já faz isso automaticamente. Porém meu ComboBox possui imagem. E com isso ele não faz isso automaticamente. Mas pelo meu conhecimento, provavelmente aplicando uma função dentro do meu comboBox render já seria o suficente para resolver o problema. Ou talvez a forma de como está o setIcon no comboBox render esteje bloqueando isso…

Vou postar o código do meu ComboBox Render, funcionando normal.

public class Renderizar_ComboBox extends JLabel implements ListCellRenderer
{
protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

    @Override
    public Component getListCellRendererComponent(JList list, Object val, int index, boolean selected, boolean focused) {
        
    JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, val, index,
    selected, focused);
        //GET VALUES
        BeansBandeiras it=(BeansBandeiras) val;
        //TelaAdicionarClube ta=(TelaAdicionarClube) val;
        //SET VALUES
        renderer.setIcon(it.getImg());
        renderer.setText(it.getName());
        
        if (selected) {
            list.setToolTipText(((BeansBandeiras) val).name);
            //list.setBackground(null);
            //list.setForeground(null);
            //setBackground(list.getSelectionBackground());
            //setForeground(list.getSelectionForeground());
            setBackground(Color.LIGHT_GRAY);
            
        if (-1 < index) {
            //list.setToolTipText(tooltips[index]);
            list.setToolTipText(((BeansBandeiras) val).name);
            }
        }
        
        else {
            //list.setToolTipText(((BeansBandeiras) val).name);
            //setBackground(list.getSelectionBackground());
            //setForeground(list.getSelectionForeground());
            setBackground(Color.WHITE);                
        }
       
        //setFont(list.getFont());
        return renderer;
    }
    
}

Sobrescreva o toString na classe BeansBandeiras para retornar o nome.

Classe que usei para teste:

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;

public class CustomListCellRenderer extends DefaultListCellRenderer {

	@Override
	public Component getListCellRendererComponent(JList<?> list, Object object,
			int index, boolean isSelected, boolean cellHasFocus) {
		ColorBean bean = (ColorBean) object;
		JLabel label = (JLabel) super.getListCellRendererComponent(list,
				bean.toString(), index, isSelected, cellHasFocus);
		label.setIcon(bean.icon);
		return label;
	}

	public static class ColorBean {
		ImageIcon icon;
		String name;

		public ColorBean(Color color, String name) {
			this.name = name;
			BufferedImage img = new BufferedImage(24, 24,
					BufferedImage.TYPE_INT_RGB);
			Graphics g = img.getGraphics();
			g.setColor(color);
			g.fillRect(0, 0, 24, 24);
			g.dispose();
			icon = new ImageIcon(img);
		}

		@Override
		public String toString() {
			return name;
		}
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JComboBox<ColorBean> c = new JComboBox<>(new ColorBean[] {
				new ColorBean(Color.WHITE, "-selecione-"),
				new ColorBean(Color.YELLOW, "amarelo"),
				new ColorBean(Color.BLUE, "azul"),
				new ColorBean(Color.RED, "vermelho"),
				new ColorBean(Color.GREEN, "verde") });
		c.setRenderer(new CustomListCellRenderer());
		frame.getContentPane().add(c);
		frame.pack();
		frame.show();
	}
}

Não consegui setar os valores do meu comboBox nesse código.

Fazendo isso já deve funcionar

/**
 * @return the name
 */
public String getName() {
    return name;
}
/**
 * @param name the name to set
 */
public void setName(String name) {
    this.name = name;
}

isso? Não ficou claro para mim. Se for isso, já estava assim.

/**
 * @return the name
 */
public String getName() {
    return name;
}

/**
 * @param name the name to set
 */
public void setName(String name) {
    this.name = name;
}
// sobrescreva o toString
public String toString() {
    return getName();
}

Vários components do swing usam o método toString para representar os objetos em forma de texto (String).

https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()