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!