Cara, acho que só tem um pequeno erro de lógica:
for (int i = 0; i <= modeloCombo.getSize(); i++) {
if(!modeloCombo.getElementAt(i).equals(jTextField1.getText())){ // Aqui se testa se o elemento atual do modelo é diferente ao texto.
modeloCombo.addElement(jTextField1.getText()); // Sob esta lógica, o que estiver na caixa de texto SEMPRE será inserido no modelo.
}
jComboBox1.setModel(modeloCombo); // Aqui há uma tentativa pra mudar o modelo. Isso não é necessário.
}
A ideia é a seguinte: o q está no campo foi encontrado no modelo? Então pára de executar o código. Se depois de percorrer o modelo todo o texto não for encontrado, aí sim você insere o nome:
public void actionPerformed(ActionEvent e){
for(int i = 0; i < modeloCombo.getSize(); ++i){
if(modeloCombo.getElementAt(i).equals(campo.getText())){
return; // Se o que estiver no campo for igual ao elemento no modelo, sai do cohdigo sem inserir o valor no modelo.
}
}
modeloCombo.addElement(campo.getText());
campo.setText("");
}
Segue um código de teste que eu fiz, talvez ajude:
import javax.swing.*;
import java.awt.event.*;
public class TesteComboBox extends JFrame implements ActionListener{
JLabel rotulo = new JLabel("Escreva um nome: ");
JTextField campo = new JTextField();
JButton botao = new JButton("Inserir");
DefaultComboBoxModel modeloCombo = new DefaultComboBoxModel(new String[]{"Joao", "Maria", "Joseh"});
JComboBox combo = new JComboBox(modeloCombo);
public TesteComboBox(){
super("Teste Combo Box");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
setLocationRelativeTo(null);
setSize(300,300);
setVisible(true);
rotulo.setBounds(10, 10, 200, 20);
campo.setBounds(10, 35, 200, 20);
combo.setBounds(10, 60, 200, 20);
botao.addActionListener(this); // O proprio formulario "ouve" os cliques do botão.
botao.setBounds(10, 85, 100, 20);
add(rotulo);
add(campo);
add(combo);
add(botao);
validate();
repaint();
}
public void actionPerformed(ActionEvent e){
for(int i = 0; i < modeloCombo.getSize(); ++i){
if(modeloCombo.getElementAt(i).equals(campo.getText())){
return; // Se o que estiver no campo for igual ao elemento no modelo, sai do cohdigo sem inserir o valor no modelo.
}
}
modeloCombo.addElement(campo.getText());
campo.setText("");
}
public static void main(String[] args){
new TesteComboBox();
}
}
o/