Não consegui entender muito bem a estrutura de seus componentes. Você tem um JList e dentro dele tem JCheckBox? É isso mesmo?
G
gilsonpolito
Isso aí… não estou com o exemplo em mão com o código aqui, mas este aí em baixo é parecido com o que fiz.
O problema é que ao clicar em um check preciso desabilitar outros.
obs.: peguei este na net.,…
Com base nisso, colocando algumas modificações, criei um Model específico e nele há métodos para controle (você pode criar outros depois). No método main tem um exemplo:
importjava.awt.Component;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjavax.swing.AbstractListModel;importjavax.swing.JCheckBox;importjavax.swing.JFrame;importjavax.swing.JList;importjavax.swing.ListCellRenderer;importjavax.swing.ListModel;importjavax.swing.ListSelectionModel;importjavax.swing.WindowConstants;publicclassJCheckBoxListextendsJList{/** * Classe que renderizará os componentes (nesse caso, JCheckBox). */protectedclassCheckBoxCellRendererimplementsListCellRenderer{publicComponentgetListCellRendererComponent(JListlist,Objectvalue,intindex,booleanisSelected,booleancellHasFocus){JCheckBoxcheckbox=(JCheckBox)value;checkbox.setBackground(isSelected?list.getSelectionBackground():list.getBackground());checkbox.setForeground(isSelected?list.getSelectionForeground():list.getForeground());checkbox.setFont(list.getFont());if(!list.isEnabled()){checkbox.setEnabled(false);}returncheckbox;}}/** * Nosso modelo. Ele tratará os JCheckBox'es. */publicclassCheckBoxListModelextendsAbstractListModel{privatestaticfinallongserialVersionUID=1L;// os checkBoxes que teremosprivateList<JCheckBox>checkBoxes;/** * Cria um modelo a partir do List de JCheckBox passado. * * @param checks * o List de JCheckBox que o modelo conterá */publicCheckBoxListModel(List<JCheckBox>checks){checkBoxes=newArrayList<JCheckBox>(checks);}/** * Adiciona um novo JCheckBox. * * @param checkBox * o JCheckBox a ser adicionado */publicvoidadd(JCheckBoxcheckBox){checkBoxes.add(checkBox);fireIntervalAdded(this,checkBoxes.size()-1,checkBoxes.size()-1);}/** * Altera o valor de seleção do JCheckBox do índice passado. * * @param index * o índice jo JCheckBox que será alternado */publicvoidchangeCheckBoxSelecionAt(intindex){if(index==-1){return;}JCheckBoxcheckBox=checkBoxes.get(index);checkBox.doClick();fireContentsChanged(this,index,index);}publicvoidsetCheckBoxSelectionAt(intindex,booleanselected){if(index==-1){return;}JCheckBoxcheckBox=checkBoxes.get(index);checkBox.setSelected(selected);fireContentsChanged(this,index,index);}/** * Remove todos os JCheckBox. */publicvoidclear(){intsize=getSize();checkBoxes.clear();fireIntervalRemoved(this,0,size-1);}publicJCheckBoxget(intindex){returncheckBoxes.get(index);}/** * @return uma cópia do List de JCheckBox que está sendo usado. */publicList<JCheckBox>getCheckBoxes(){returnnewArrayList<JCheckBox>(checkBoxes);}@OverridepublicObjectgetElementAt(intindex){returncheckBoxes.get(index);}@OverridepublicintgetSize(){returncheckBoxes.size();}/** * Verifica o índice de determinado JCheckBox. * * @param checkBox * o JCheckBox a ser verificado * @return o índice dele no Model */publicintindexOf(JCheckBoxcheckBox){returncheckBoxes.indexOf(checkBox);}/** * Remove o JCheckBox do índice específico. * * @param index * o índice do JCheckBox a ser removido */publicvoidremove(intindex){checkBoxes.remove(index);fireIntervalRemoved(this,index,index);}/** * Ativa ou desativa o JCheckBox no índice especificado. * * @param index * @param enabled */publicvoidsetCheckBoxAtEnabled(intindex,booleanenabled){checkBoxes.get(index).setEnabled(enabled);fireContentsChanged(this,index,index);}}privatestaticfinallongserialVersionUID=1L;privateCheckBoxListModelcheckBoxListModel;/** * Construtor alternativo para facilitar a chamada. * * @param checkBoxes * os JCheckBox que serão usados */publicJCheckBoxList(JCheckBox...checkBoxes){this(Arrays.asList(checkBoxes));}/** * Construtor padrão. Cria um JCheckBoxList que conterá todos os JCheckBox * que estão na List. * * @param checks * os JCheckBox que serão usados. */publicJCheckBoxList(List<JCheckBox>checks){// cria nosso modelo própriocheckBoxListModel=newCheckBoxListModel(checks);// e usa o CellRenderer e o ListModel que criamossetCellRenderer(newCheckBoxCellRenderer());setModel(checkBoxListModel);// adiciona os Listeners que mudam a seleção do JCheckBoxaddMouseListener(newMouseAdapter(){@OverridepublicvoidmouseClicked(MouseEvente){intindex=locationToIndex(e.getPoint());checkBoxListModel.changeCheckBoxSelecionAt(index);}});addKeyListener(newKeyAdapter(){@OverridepublicvoidkeyPressed(KeyEvente){if(e.getKeyCode()==KeyEvent.VK_SPACE){intindex=getSelectedIndex();checkBoxListModel.changeCheckBoxSelecionAt(index);}}});// e permite seleção únicasetSelectionMode(ListSelectionModel.SINGLE_SELECTION);}@OverridepublicCheckBoxListModelgetModel(){returncheckBoxListModel;}/** * Sobreescrita de setModel, permitindo apenas instâncias de * CheckBoxListModel para nosso JList. * * @throws IllegalArgumentException * se o model passado não for instância de CheckBoxListModel */@OverridepublicvoidsetModel(ListModelmodel)throwsIllegalArgumentException{if(!(modelinstanceofCheckBoxListModel)){thrownewIllegalArgumentException("The model must be a CheckBoxCellRender instance.");}checkBoxListModel=(CheckBoxListModel)model;super.setModel(model);}/** * Somente para testes. */publicstaticvoidmain(Stringargs[]){JFrameframe=newJFrame();frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);JCheckBoxone=newJCheckBox("one");finalJCheckBoxListcbList=newJCheckBoxList(one,newJCheckBox("two"),newJCheckBox("three"));// para alterar valores, adicionamos um Listener que escuta quanto o// JCheckBox é pressionado e faz as ações abaixo:one.addItemListener(newItemListener(){@OverridepublicvoiditemStateChanged(ItemEvente){// alterna a seleção do check box do índice 1cbList.getModel().setCheckBoxAtEnabled(1,!cbList.getModel().get(1).isEnabled());// altera o enabled do check box do índice 2cbList.getModel().changeCheckBoxSelecionAt(2);}});frame.add(cbList);frame.pack();frame.setVisible(true);}}