Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/06/2019, 21:01
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: JCombobox multi seleccionable

Buenas a todos, resulta que puedo seleccionar más de un elemento así:

Código Java:
Ver original
  1. package app.vista.util.combo.modelos;
  2. import app.contr.man.ServiciosContr;
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.util.HashSet;
  6. import javax.swing.JCheckBox;
  7. import javax.swing.JList;
  8. import javax.swing.ListCellRenderer;
  9. public class CheckRenderer extends JCheckBox implements ListCellRenderer {
  10.         private HashSet instructionHashset=new HashSet();
  11.         int t = ServiciosContr.getInstance().findAll(null).size();
  12.         public JCheckBox[] cbl = new JCheckBox[t];
  13.         public CheckRenderer() {
  14.             setOpaque(true);
  15.             for(int i = 0; i < t; i ++) {
  16.                 cbl[i] = new JCheckBox();
  17.             }
  18.         }
  19.         @Override
  20.         public Component getListCellRendererComponent(JList list, Object value,
  21.             int index, boolean isSelected, boolean cellHasFocus) {
  22.             if (index > -1) {
  23.                 cbl[index].setText(value.toString());
  24.                 cbl[index].setBackground(isSelected ? Color.green : Color.white);
  25.                 cbl[index].setForeground(isSelected ? Color.white : Color.black);
  26.                 if(cbl[index].isSelected()) {
  27.                     getInstructionHashset().add(value);
  28.                 } else {
  29.                     getInstructionHashset().remove(value);
  30.                 }
  31.                 return cbl[index];
  32.             }
  33.             return cbl[0];
  34.         }
  35.             public HashSet getInstructionHashset() {
  36.         return instructionHashset;
  37.     }
  38. }

Código Java:
Ver original
  1. package app.vista.interfaz;
  2. import app.vista.util.combo.modelos.ModeloServicioCombo;
  3. import app.vista.util.combo.modelos.CheckRenderer;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.KeyAdapter;
  7. import java.awt.event.KeyEvent;
  8. import javax.swing.SwingUtilities;
  9. public class probando extends javax.swing.JFrame {
  10.     public probando() {
  11.         initComponents();
  12.  
  13.         cboxprueba.addActionListener(new ActionListener() {
  14.             @Override
  15.             public void actionPerformed(ActionEvent arg0) {
  16.                 int sel = cboxprueba.getSelectedIndex();
  17.                 if (sel == 0) {
  18.                     cboxprueba.getUI().setPopupVisible(cboxprueba, false);
  19.                 } else if (sel > 0 && sel < cboxprueba.getModel().getSize()) {
  20.                     ((CheckRenderer)cboxprueba.getRenderer()).cbl[sel].setSelected(!((CheckRenderer)cboxprueba.getRenderer()).cbl[sel].isSelected());
  21.                 }
  22.             }
  23.         });
  24.         cboxprueba.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
  25.             @Override
  26.             public void keyReleased(KeyEvent e) {
  27.                 SwingUtilities.invokeLater(() -> {
  28.                     String criterio = cboxprueba.getEditor().getItem().toString();
  29.                     cargarServicios(criterio);
  30.                 });
  31.             }            
  32.         });
  33.     }
  34.     private void cargarServicios(String criterio){
  35.         ModeloServicioCombo modelo = new ModeloServicioCombo(
  36.             criterio.toUpperCase());        
  37.         if(modelo.getSize() > 0){
  38.             cboxprueba.setModel(modelo);
  39.             //cboxprueba.setRenderer(new CeldaServicioCombo());
  40.             cboxprueba.setRenderer(new CheckRenderer());
  41.             cboxprueba.setSelectedItem(criterio);
  42.             cboxprueba.showPopup();
  43.         } else {
  44.             cboxprueba.hidePopup();
  45.         }
  46.     }
  47.  
  48.     // Variables declaration - do not modify                    
  49.     private javax.swing.JComboBox<String> cboxprueba;
  50.     private javax.swing.JPanel pnlpantalla;
  51.     // End of variables declaration                  
  52. }

Siempre y cuando no escribe en el combobox porque me borra las selecciones, además cuando filtro y selecciono lo del filtro no me permite seleccionar el 1ero, si el 2do.
Primero quiero lograr que ande bien las selecciones, para luego seguir con poner lo seleccionado en el jcombobox como dije al principio.

Espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias