Sauda��es a todos,
 
Aqui vai a minha contribui��o sobre este assunto.
 
N�o sei ao certo a finalidade da execu��o deste ComboBox, mas a minha sugest�o � a utiliza��o de um modelo de dados diferente do padr�o.
Quando vc cria um comboBox passando um vector como par�metro, este vector ser� inclu�do na inst�ncia de DefaultComboBoxModel, que � o modelo de dados por tr�s de todo comboBox.
 
Ao criar um modelo de dados customizado, vc pode manipular as estruturas que vc quiser (inclusive os dados podem ser objetos diferentes de strings).
Por�m, se os objetos que vc retornar forem diferentes de strings, voc� ter� que mudar o renderer do comboBox para um customizado tamb�m.
Lembre-se tamb�m que vc deve manipular o modelo de dados, e n�o o comboBox, que apenas representa as informa��es no modelo visualmente.
 
Existem algumas coisinhas a mais para fazer (inclusive deve-se utilizar os m�todos fire existentes). Maiores informa��es podem ser conseguidas na pr�pria documenta��o do Java ou no Java Tutorial.
 
Qualquer coisa, estamos no aguardo.
 
Falow...
Edson Yanaga
 
Segue em seguida um exemplo de modelo de dados para um comboBox. (Para utiliz�-lo, fa�a: comboBox.setModel(modeloComboBoxModel); )
 
import java.awt.*;
import javax.swing.*;
 
public class ModeloComboBoxModel extends AbstractListModel implements ComboBoxModel {
/* estrutura de manipula��o: pode ser um vector ou um ArrayList, ou qualquer outra coisa, inclusive consultas de BD (acho). */
    protected Vector elementos = new Vector(10);
 
//
// M�todos implementados pela interface ListModel
//
  public int getSize() {
    /* c�digo que retorna o n�mero de elementos do comboBox */
  }
 
  public Object getElementAt(int index) {
    /* c�digo que retorna o elemento de �ndice index */    
  }
 
//
// M�todos implementados pela interface ComboBoxModel
//
  public Object getSelectedItem() {
    /* c�digo que retorna o item selecionado (o item que aparece na caixinha) */    
  }
 
  public void setSelectedItem(Object anItem) {
    /* c�digo que seta o item selecionado */    
  }
 
}
----- Original Message -----
Sent: Thursday, November 04, 1999 12:37 AM
Subject: JComboBox

 
Caros amigos da lista
Apesar da ajuda do Nil Inacio Santos,a qual agrade�o muito, ainda n�o consegui resolver o meu problema de JComboBox din�mico.

Estou mandando peda�os do meu c�digo para ver se algu�m pode me ajudar...

tenho o seguinte vetor:
Vector agentecolega = new Vector(1);
agentecolega.addElement("maria");
agentecolega.addElement("teresa");

Isto � para a inclus�o dos dados no JComboBox();
 

Isto para garantir que o JComboBox() nunca ficar� vazio...
   if(agentecolega.isEmpty()) {
     agentecolega.addElement("Sem Colaborador");
   }
 

  JComboBox Agentes_colega = new JComboBox();
  for(int i=0; i<agentecolega.size(); i++) {
    Agentes_colega.addItem((String) agentecolega.get(i));
  }
        
  Agentes_colega.setEditable(true); 
  Agentes_colega.setSelectedItem((String) agentecolega.get(0));
  A_IpSuperior.setText("");
  A_Irmao.setText("");

  Agentes_colega.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        JComboBox cb = (JComboBox)e.getSource();
          String selec = (String)cb.getSelectedItem();
          if(!(selec.equals("Sem Colaborador"))) {
            A_Irmao.setText(selec);
            A_IpIrmao.setText(Ipagente(selec));
          }  
    }
   });


Depois de processado algumas outras rotinas, as quais n�o alteram o JComboBox() � preciso remover os itens do mesmo e inserir novos itens...

J� tentei dois comandos:

 1) Agentes_colega.removeAllItems();
     2)   if(!(agentecolega.isEmpty())) {  Este � o mesmo vetor que inseri os dados acima...
              for(int i=0; i<agentecolega.size(); i++) {
                   Agentes_colega.removeItem((String) agentecolega.get(i));
            }
          }

        Agentes_colega.revalidate();

Um novo vetor � criado e novamente � inserido no componente
    for(int i=0; i<agentecolega.size(); i++) {
         Agentes_colega.addItem((String) agentecolega.get(i));
    }
  Agentes_colega.revalidate();

Entretanto, hora funciona o hora da erro de ponteiro na hora de excluir os dados...
A primeira vez,  quando o JComboBox() � criado sempre funciona... por�m nas outras vez que � preciso fazer a remo��o dos dados do componente, hora sim, hora n�o d� os seguintes erros:.

===> Este d� quando tento remover com o item 1)
Exception occurred during event dispatching:
java.lang.IndexOutOfBoundsException: -1
        at java.util.BitSet.get(Compiled Code)
        at javax.swing.DefaultListSelectionModel.clear(Compiled Code)
        at javax.swing.DefaultListSelectionModel.setState(DefaultListSelectionMo
del.java:405)
        at javax.swing.DefaultListSelectionModel.removeIndexInterval(Compiled Co
de)
        at javax.swing.plaf.basic.BasicListUI$ListDataHandler.intervalRemoved(Ba
sicListUI.java:1071)
        at javax.swing.AbstractListModel.fireIntervalRemoved(Compiled Code)
        at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxMod
el.java:167)
        at javax.swing.JComboBox.removeAllItems(Compiled Code)
        at jess.examples.meu.DadosAgentes$1.actionPerformed(Compiled Code)
        at javax.swing.JComboBox.fireActionEvent(Compiled Code)
        at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:660)
        at javax.swing.JComboBox.contentsChanged(Compiled Code)

===>Este na segunda op��o 2) sempre na remo��o do segundo item...

Exception occurred during event dispatching:
java.lang.NullPointerException:
        at jess.examples.meu.DadosAgentes$2.actionPerformed(DadosAgentes.java:35
5)
        at javax.swing.JComboBox.fireActionEvent(Compiled Code)
        at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:660)
        at javax.swing.JComboBox.contentsChanged(Compiled Code)
        at javax.
 

Agrade�o muito a ajuda de voces...

Se existir um jeito mais f�cil de fazer isto eu agrade�o... Eu quero apenas criar um JComboBox() inicial, e durante o processamento do programa alterar seu valor de acordo com a escolha feita pelo o usu�rio...

Grata

Vera
ITA-Instituto Tecnol�gico de Aeron�utica

Responder a