2010-11-18 38 views
15

Antecedentes: Estoy haciendo algo de trabajo de IU en un entorno de eclipse donde llené un control combinado con algunos valores. Los valores de cadena tienen una longitud diferente y, a menudo, una longitud mayor que el ancho combinado y el ancho del compuesto principal.¿Cómo cambio el tamaño del menú desplegable de un cuadro combinado?

Problema: Cuando abro la lista desplegable, el ancho de la lista es mayor que el ancho del compuesto principal y el usuario no pudo ver el valor completo de la entrada de la lista.

He intentado utilizar la opción "setTextLimit", pero sin éxito. Para mí es perfectamente adecuado si pudiera establecer el ancho de la lista de dropdon con un valor constante.

Código ejemplo:

this.mComponentName = new Combo (lComponentComposite, SWT.BORDER); 
this.mComponentName.setTextLimit(COMBO_TEXT_LIMIT); 
GridData componentNameGridData = new GridData(); 
componentNameGridData.widthHint = 166; 
this.mComponentName.setLayoutData(componentNameGridData); 
this.mComponentName.addSelectionListener(this.mComboSelectionAdapter); 
this.mComponentName.addKeyListener(this.mComboKeyAdapter); 

Saludos Dirk

Respuesta

-1
combo.setPreferredSize(new Dimension(FIX_WIDTH, FIX_HEIGHT)); 
+1

setPrefferedSize no está disponible en combinación SWT – codejammer

1

bien la creación de un cuadro combinado especifica desplazamiento horizontal también

this.mComponentName = new Combo (lComponentComposite, SWT.BORDER|SWT.H_SCROLL); 

esto no va a dejar que el texto desbordado

+0

añadiendo un desplazamiento no se detendrá su expansión si el nombre es largo. Ver mi pregunta [aquí] (http://stackoverflow.com/questions/32561924/how-to-stop-jface-combo-box-from-re-sizing-on-a-window-re-size) –

-2

probar este

  JComboBox CB = new JComboBox(); 
      CB.setPreferredSize(new Dimension(int, int)); 
      p.add(CB);// which p is a JPanel 
+3

La pregunta está relacionado con SWT, no AWT/Swing. –

0

¿Usted ha intentado pasar algún otro valor como su segundo parámetro de inicialización en su Combo (primera línea)? Algo más que SWT.BORDER?

He intentado averiguar si es posible mostrar las cadenas en varias filas (como un solo elemento del cuadro combinado), pero sin éxito. Esto reduciría el ancho de tus artículos. Intente agregar \ n a un par de cadenas que agregue al cuadro combinado, y vea si funcionará. Si funciona, puede automatizar este proceso más adelante analizando la cadena y comprobando si el recuento de caracteres de espacio alcanza un valor alto y agrega \ n después de cada quinto o sexto carácter en blanco. Creo que la sugerencia de codejammer es la mejor, pero no puedo votar aún.

+0

Si estuviera usando una Tabla o un Árbol, la barra de desplazamiento aparecería por sí misma, a menos que use NO_SCROLL como su parámetro de estilo. – programstinator

1

Esa es realmente una buena pregunta. Después de buscar foros de desarrolladores e incluso el código fuente, me inclino a decir que no es posible.

me resolvió el problema temporalmente por el cambio a un CCombo, pero no me gusta la solución ya que creo que uno de la fuerza de SWT es en el uso de los widgets nativos, y el CCombo no se ve tan buena (al menos en Win7 y sistema operativo X).

1

Al seleccionar un cuadro combinado desplegable o un cuadro de lista desplegable para dimensionarlo, solo están activos los controles de tamaño derecho e izquierdo. Utilice estos controles para establecer el ancho del cuadro como se muestra inicialmente. Elija la flecha desplegable a la derecha del cuadro combinado. El contorno del control cambia para mostrar el tamaño del cuadro combinado con el área desplegable extendida.

Utilice la palanca de tamaño inferior para cambiar el tamaño inicial del área desplegable. Vuelva a elegir la flecha desplegable para cerrar la parte desplegable del cuadro combinado.

0

Se solucionó parcialmente el problema añadiendo a los nombres de los elementos algunos espacios (se ha establecido el número de espacios por prueba y error). Ahora el combo es más ancho y todos los textos son visibles, sin embargo, el desplazamiento horizontal también es visible.

String p = "                "; 
combo.add("Long.... item name 1"+p); 
combo.add("Long item name ..... 2"+p); 
... 

Otra soultion es cambiar el tamaño combinado cuando se gana el enfoque y la restauración de tamaño después de foco perdido. Ejemplo a continuación.

final Point p = combo.getSize(); 
combo.addFocusListener(new FocusListener() { 
    @Override 
    public void focusLost(FocusEvent e) { 
     ((Control) e.getSource()).setSize(p); 
    } 

    @Override 
    public void focusGained(FocusEvent e) { 
     ((Control) e.getSource()).setSize(new Point(400, p.y)); 
    } 
}); 
Cuestiones relacionadas