2010-05-18 40 views
5

Conozco JList y JComboBox. Necesito la funcionalidad desplegable del cuadro combinado con la funcionalidad de selección múltiple que proporciona JList.¿Cómo crear una lista desplegable en java swing con selección de múltiples elementos?

Esto se debe a que el contenido de la lista es demasiado grande para mostrarse con una lista simple. También necesito seleccionar varios elementos, de lo contrario me hubiera contentado con JComboBox.

¿Alguna sugerencia?

Respuesta

7

Al usar la selección múltiple, es mejor usar una lista que un cuadro combinado. A medida que avanzan las metáforas de GUI, la gente espera que un cuadro combinado sea de selección única, mientras que las listas pueden ser cualquiera.

el contenido de la lista son demasiado grandes para ser visualizado mediante una simple lista

Coloque el JList en un JScrollPane. Puede llamar al setVisibleRowCount(int) en el JList para especificar cuántas filas a la vez deben mostrarse.

3

Puede crear un procesador de celdas personalizado para el cuadro combinado y agregar casillas de verificación a esos componentes, para que pueda marcarlos y desmarcarlos. Tienes que hacer algo como esto:

public class MyComboBoxRenderer implements ListCellRenderer { 

    private String[] items; 
    private boolean[] selected; 

    public MyComboBoxRenderer(String[] items){ 
     this.items = items; 
     this.selected = new boolean[items.lenght]; 
    } 

    public Component getListCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int index) { 
     // Create here a JLabel with the text 
     // Create here a JCheckBox 
     // Add them to a layoutmanager 
     return this; 
    } 

    public void setSelected(int i, boolean flag) 
    { 
     this.selected[i] = flag; 
    } 

} 
+0

Esto se debe clase extiende algunos subtipos de 'Component' con el fin de hacer que el tipo de retorno de la coincidencia 'getListCellRendererComponent()', si desea 'devolver esto;'. Si desea devolver la etiqueta que ha creado, está bien el original (por lo que realmente no lo entiendo). ¿Y de dónde viene este 'setSelected()'? Lo mejor es publicar todo el código. – FaithReaper

0

Para lograr la funcionalidad descrita, finalmente decidí "abusar" del JMenuBar y agregarle varios JCheckBoxMenuItems. La GUI entonces encaja perfectamente con el propósito (al menos para mí), es solo el manejo del ItemEvent que corre el riesgo de volverse un poco molesto.

(por fin allí, define una lógica poco más de los artículos, y después se pueden restringir a mí mismo para el manejo de un solo tipo de evento)

Cuestiones relacionadas