Parecia fácil... Ou, como conseguir uma ArrayIndexOutOfBoundsException! [RESOLVIDO]

private void limpar(Container container) {
        
        Component[] componentes = container.getComponents();
        
        for (Component c : componentes){
            
            if (c instanceof JPanel || c instanceof JTabbedPane) {
                JComponent pnl = (JComponent) c;
                limpar( pnl );
                                
            } else if (c instanceof JTextComponent) {
                ((JTextComponent) c).setText("");
            
            } else if (c instanceof JToggleButton) {
                ((JToggleButton) c).setSelected( false );
            
            } else if (c instanceof JComboBox) {
                ((JComboBox) c).setSelectedIndex(-1);
            }
        }
    }

Salve! Estou tentando implementar o método acima com o objetivo de limpar todos os campos de um JFrame.
Somente para JTextField funcionou perfeitamente. Mas os problemas começaram quando tentei ir além, e abranger também outros componentes, em especial o JComboBox, que me parece ser a origem do problema…

Uma exceção é lançada, e nela há referência a trechos (linha 6) do código abaixo, que implementa o listener para o combo box.

cboTiposDeCombustivel.addItemListener( new ItemListener() {
            @Override
            public void itemStateChanged( ItemEvent evt) {
                
                int i = cboTiposDeCombustivel.getSelectedIndex(); //Obtém o índice -1
                txtPrecoCombustivel.setText( 
                    Double.toString( combustiveis.get(i).getPrecoPorLitro() ) //Tenta acessar a posição -1 do ArrayList
                );
                txtEstoque.setText(
                    Integer.toString( combustiveis.get(i).getLitrosEmEstoque() )
                );
            }  
        });

Seguem abaixo as mensagens de erro geradas…

Já esgotei minhas possibilidades, tentando de todas as formas que fui capaz… Por isso recorro aos companheiros de fórum para que me ajudem a encontrar e corrigir o erro.
Não tenho muito domínio sobre o controle de exceções, mas acredito que as respostas que desejo encontram-se nas mensagens de erro acima. Então se puderem também me indicar boas fontes para aprender a respeito…

De qualquer forma, se você leu a mensagem até aqui: muito obrigado!

Esse erro é quando vc tenta acessar (no caso -1) um index de um array que não existe…
E deve estar ocorrendo mesmo no combobox…

No seu combo, vc não tem nenhuma opção neutra/todos? aponte seu combo para esse index, que provável ser 0

Não sei como funciona no Swing, mas o problema pode estar aqui:

 ((JComboBox) c).setSelectedIndex(-1);  

Ele deve atribuir o índice do combo (e índice negativo não existe). Talvez, o “value” do campo default esteja como “-1”, por isso a confusão. Provavelmente seu campo default deve estar na primeira posição, então, tenta colocar isso:

 ((JComboBox) c).setSelectedIndex(0);  

regis_hideki e igor_ks, exatamente como vocês disseram!

Depois de apanhar um pouco do Debug, consegui chegar até a seguinte instrução: ((JComboBox) c).setSelectedIndex(-1). Então percebi que ao definir o índice do combo box como -1, mesmo que através de programação, era disparado um ItemEvent que culminava na seguinte linha do listener: txtPrecoCombustivel.setText( Double.toString( combustiveis.get(i).getPrecoPorLitro() ))… Como i = -1, consegui um belo ArrayIndexOutOfBoundsException!

Resolvi, como sugerido, acrescentando um elemento vazio ao início do ArrayList que alimenta o combo box.

Valeu!