2010-11-18 21 views
15

Sfondo: Sto facendo un po 'di interfaccia utente in un ambiente di eclissi in cui riempio un controllo combinato con alcuni valori. I valori di stringa hanno una lunghezza diversa e spesso una lunghezza maggiore della larghezza combinata e della larghezza del composito padre.Come ridimensionare il menu a discesa di una casella combinata?

Problema: Quando apro l'elenco a discesa, la larghezza dell'elenco è maggiore della larghezza del genitore composito e l'utente non può vedere il valore completo della voce dell'elenco.

Ho provato a utilizzare l'opzione "setTextLimit", ma senza esito positivo. Per me è perfettamente adeguato se potessi impostare la larghezza della lista dropdon con un valore costante.

Codice esempio:

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); 

Saluti dirk

risposta

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

setPrefferedSize non è disponibile in SWT combo – codejammer

1

Durante la creazione di una casella combinata specificare scorrimento orizzontale anche

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

questo non lasciare che il testo in eccesso

+0

l'aggiunta di un rotolo non si fermerà di espandersi se il nome è lungo. Vedi la mia domanda [qui] (http://stackoverflow.com/questions/32561924/how-to-stop-jface-combo-box-from-re-sizing-on-a-window-re-size) –

-2

Prova questa

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

La domanda riguarda SWT, non AWT/Swing. –

0

Hai provato passando un altro valore come secondo parametro nella vostra Combo inizializzazione (prima linea)? Qualcosa di diverso da SWT.BORDER?

Ho provato a scoprire se è possibile visualizzare le stringhe in più righe (come un singolo oggetto casella combinata), ma senza successo. Ciò ridurrebbe la larghezza dei tuoi articoli. Prova ad aggiungere \ n a un paio di stringhe che aggiungi alla casella combinata e verifica se funzionerà. Se funziona, puoi automatizzare questo processo in seguito analizzando la stringa e controllando se il conteggio dei caratteri dello spazio diventa troppo alto e aggiungendo \ n dopo ogni quinto o sesto carattere vuoto. Penso che il suggerimento di codejammer sia il migliore, ma non posso ancora farlo.

+0

Se si stesse usando una tabella o un albero, la barra di scorrimento comparirebbe da sola, a meno che non si usasse NO_SCROLL come parametro di stile. – programstinator

1

Questa è davvero una buona domanda. Dopo aver scavato attraverso i forum degli sviluppatori e anche il codice sorgente, mi propongo di dire che non è possibile.

ho risolto il problema temporaneamente passando a un CCombo, ma non mi piace la soluzione come credo una delle forza di SWT è nell'uso widget nativi, e il CCombo non sembra buono (almeno su Win7 e OS X).

1

Quando si seleziona una casella combinata a discesa o una casella di riepilogo a discesa per ridimensionarla, sono attivi solo i quadratini di ridimensionamento destro e sinistro. Usa queste maniglie per impostare la larghezza della scatola come viene visualizzata inizialmente. Scegli la freccia a discesa a destra della casella combinata. La struttura del controllo cambia per mostrare la dimensione della casella combinata con l'area a discesa estesa.

Utilizzare la maniglia di ridimensionamento in basso per modificare la dimensione iniziale dell'area a discesa. Scegli nuovamente la freccia a discesa per chiudere la parte a discesa della casella combinata.

0

Parzialmente risolto il problema aggiungendo alcuni nomi agli spazi (è stato impostato il numero di spazi per tentativi ed errori). Ora la combinazione è più ampia e tutti i testi sono visibili, tuttavia è visibile anche lo scorrimento orizzontale.

Un'altra anima viene ridimensionata quando diventa attiva e ripristina le dimensioni dopo la messa a fuoco persa. Esempio di seguito.

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)); 
    } 
}); 
Problemi correlati