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

Buenas a todos, ando un poco resignado y quería preguntarles lo siguiente, teniendo este código:

Código Java:
Ver original
  1. package app.vista.util.combo.celdas;
  2. import java.awt.*;
  3. import javax.swing.*;
  4. import javax.swing.border.EmptyBorder;
  5. public abstract class AbstractComboRenderer implements ListCellRenderer {
  6.     @Override
  7.     public Component getListCellRendererComponent(JList list, Object value,
  8.         int index, boolean isSelected, boolean cellHasFocus) {
  9.         JTextPane data = prepareData(value);
  10.         if (index % 2 == 0) {
  11.             colourColumn(data, Color.LIGHT_GRAY);            
  12.         } else {
  13.             colourColumn(data, Color.WHITE);            
  14.         }
  15.         if(isSelected){
  16.             colourColumn(data, Color.PINK);            
  17.         }
  18.         return data;
  19.     }
  20.     protected void colourColumn(JTextPane ta,Color xc){
  21.         ta.setBackground(xc);
  22.         ta.setForeground(Color.BLACK);
  23.     }
  24.     protected JTextPane prepareData(Object value){
  25.         JTextPane data = new JTextPane();                
  26.         data.setOpaque(true);        
  27.         data.setFont(new Font("DejaVu Sans",Font.BOLD, 12));
  28.         data.setBorder(new EmptyBorder(5, 10, 5, 10));
  29.         data.setForeground(Color.BLACK);        
  30.         data.setText("» " + displayData(value));
  31.         return data;
  32.     }
  33.     abstract protected String displayData(Object value);
  34. }

Código Java:
Ver original
  1. package app.vista.util.combo.celdas;
  2. import app.contr.clases.Servicio;
  3. public class CeldaServicioCombo extends AbstractComboRenderer {
  4.     @Override
  5.     protected String displayData(Object value) {
  6.         Servicio servicio = (Servicio) value;
  7.         return servicio.getNombre();
  8.     }
  9. }

Código Java:
Ver original
  1. package app.vista.util.combo.modelos;
  2. import javax.swing.AbstractListModel;
  3. import javax.swing.ComboBoxModel;
  4. public abstract class AbstractComboModel extends AbstractListModel
  5.     implements ComboBoxModel {
  6.     private Object selection;  
  7.     private String criterio;
  8.     public AbstractComboModel(String xcriterio) {
  9.         this.criterio = xcriterio;
  10.     }    
  11.     @Override
  12.     public void setSelectedItem(Object anItem) {
  13.         if ((selection != null && !selection.equals(anItem))
  14.             || selection == null && anItem != null) {
  15.             selection = anItem;
  16.             fireContentsChanged(this, -1, -1);
  17.         }
  18.     }
  19.     @Override
  20.     public Object getSelectedItem() {
  21.         return selection;
  22.     }
  23.     public String getCriterio() {
  24.         return criterio;
  25.     }
  26.     public void setCriterio(String criterio) {
  27.         this.criterio = criterio;
  28.     }        
  29. }

Código Java:
Ver original
  1. package app.vista.util.combo.modelos;
  2. import app.contr.man.ServiciosContr;
  3. import app.contr.clases.Servicio;
  4. import java.util.ArrayList;
  5. public class ModeloServicioCombo extends AbstractComboModel {
  6.     private ArrayList<Servicio> servicios;
  7.     public ModeloServicioCombo(String xcriterio) {
  8.         super(xcriterio);
  9.         servicios = ServiciosContr.getInstance().findbySearch(xcriterio);
  10.     }
  11.     @Override
  12.     public int getSize() {
  13.         return servicios.size();
  14.     }
  15.     @Override
  16.     public Servicio getElementAt(int index) {
  17.         return servicios.get(index);
  18.     }  
  19. }

Código Java:
Ver original
  1. package app.vista.interfaz;
  2. import app.vista.util.combo.modelos.ModeloServicioCombo;
  3. import app.vista.util.combo.celdas.CeldaServicioCombo;
  4. import java.awt.event.KeyAdapter;
  5. import java.awt.event.KeyEvent;
  6. import javax.swing.SwingUtilities;
  7. public class probando extends javax.swing.JFrame {
  8.     public probando() {
  9.         initComponents();
  10.         cboxprueba.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
  11.             @Override
  12.             public void keyReleased(KeyEvent e) {
  13.                 SwingUtilities.invokeLater(() -> {
  14.                     String criterio = cboxprueba.getEditor().getItem().toString();
  15.                     cargarServicios(criterio);
  16.                 });
  17.             }            
  18.         });
  19.     }
  20.     private void cargarServicios(String criterio){
  21.         ModeloServicioCombo modelo = new ModeloServicioCombo(
  22.             criterio.toUpperCase());        
  23.         if(modelo.getSize() > 0){
  24.             cboxprueba.setModel(modelo);
  25.             cboxprueba.setRenderer(new CeldaServicioCombo());
  26.             cboxprueba.setSelectedItem(criterio);
  27.             cboxprueba.showPopup();
  28.         } else {
  29.             cboxprueba.hidePopup();
  30.         }
  31.     }
  32.     @SuppressWarnings("unchecked")                        
  33.     // Variables declaration - do not modify                    
  34.     private javax.swing.JComboBox<String> cboxprueba;
  35.     private javax.swing.JPanel pnlpantalla;
  36.     // End of variables declaration                  
  37. }

¿cómo puedo hacer para que al seleccionar opciones que me así?

|EMERGENCIA X| |MEDICINA X|

¿y que al seleccionar por ejemplo medicina se quedandome así?

|EMERGENCIA X|

Intenté basarme en el siguiente link pero estoy usando Apache Netbeans 11 y en el código lo crea todo a mano: Select multiple JCheckBox in JComboBox

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