2010-11-02 19 views
5

Problema: ho bisogno di una tabella SWT (JFace TableViewer) con altezza di riga variabile. In effetti, ho risolto questo problema sul mio computer di sviluppo (con Ubuntu 10.10). Sfortunatamente, questo non funziona su Windows o su Mac.Tabella SWT con altezza di riga variabile: funziona su Linux, ma non su Mac/Windows

Inizialmente, pensavo di non aver usato correttamente le librerie. Ma ormai temo che ciò che voglio fare sia semplicemente impossibile su Windows. Spero che qualcuno qui mi convinca altrimenti.

Per riprodurre: anziché fornire il mio codice qui, ho creato un programma minimale per riprodurre il problema. Ho iniziato con il seguente Snipplet:

http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet049StyledCellLabelProvider.java

ho modificato il metodo update() per produrre due righe di testo per le directory e una linea per i file (per simulare un ambiente con altezze di righe variabile):

... 
if (file.isDirectory()) { 
    cell.setText(styledString.toString() + "\n" 
     + styledString.toString()); 
    cell.setImage(IMAGE1); 
} else { 
    cell.setImage(IMAGE2); 
} 
...

Questo funziona come previsto su Linux, ma su Windows tutte le righe hanno la stessa altezza. In particolare, è visibile solo una linea.

Successivamente, stavo cercando di aiutare SWT rendendo measure() più intelligente. Così ho riscritto misura() in questo modo:

protected void measure(Event event, Object element) { 
    if (((File) element).isDirectory()) { 
     event.height = 32; 
    } else { 
     event.height = 16; 
    } 
    super.measure(event, element); 
}

Il risultato: Tutte le righe hanno l'altezza 32. Ancora una volta, questo funziona come previsto su Linux.

La mia paura è che su Windows tutte le righe devono avere la stessa altezza. Questo sarebbe uno showstopper per me. Qualcuno può confermare questo, o ancora meglio, fornire una soluzione alternativa?

Grazie!

+0

In realtà, avrei trovato una spiegazione per questo comportamento, e forse anche un fix (devo ancora provare questo fuori): https://bugs.eclipse.org/bugs/show_bug .cgi? id = 148039 – jastram

+0

Grazie a tutti per le risposte. Ho finito per utilizzare http://sourceforge.net/projects/agilegrid/, che disegna anche la tabella in modo nativo, come KTable. È un piacere lavorare con, certamente rispetto a SWT. – jastram

risposta

2

Posso confermare che su righe di tabella Win32 può avere solo la stessa altezza. Vedi ad esempio this bug report. La soluzione alternativa dal bug 148039 rende accessibile setItemHeight(), ma ciò non modifica questa restrizione.

4

Mi sono imbattuto anche in questo problema: ho bisogno di un widget di tabella SWT in grado di supportare celle di altezze diverse. Come dice the.duckman, le righe della tabella Win32 non possono farlo. Abbiamo finito per utilizzare il widget KTable. Non usa le tabelle del sistema operativo nativo.

http://sourceforge.net/projects/ktable/

Ha funzionato bene per noi, ma ha alcune stranezze. Fortunatamente il codice sorgente è abbastanza facile da modificare in base alle proprie esigenze.

+0

Sembra davvero interessante.Se non avessi ancora effettuato il refactoring con AgileGrid, darei una prova a Ktable. – jastram

1

Utilizziamo il widget Nebula Grid. http://www.eclipse.org/nebula/widgets/grid/grid.php

È eccezionalmente flessibile. Nel nostro caso lo usiamo per ottenere più funzionalità della tabella di stile html combinate con un widget treeViewer.

Schermata alt text

+0

Sei sicuro che Nebulosa risolva questo problema? Credo di averlo verificato e rifiutato. Non sono sicuro che il tempo lo abbia respinto perché era in ALFA, o perché aveva anche i limiti di altezza delle file. Ma io * penso * sia a causa di problemi di altezza delle file pure. – jastram

+0

Per ottenere le altezze variabili non è completamente fuori dalla scatola, ma è molto semplice. Ogni riga nella griglia ha il proprio attributo di altezza indipendente. Quindi, come in Paint/Measure in un normale widget di tabella, è possibile regolare l'altezza, ma tutti i tableitems sono ora all'altezza massima in Grid è possibile regolare ogni GridItem.setHeight(). Nel mio caso sto utilizzando il visualizzatore della tabella della griglia e il mio metodo di aggiornamento del fornitore dell'etichetta calcola l'altezza appropriata per ogni riga. È Beta ma è stato molto stabile per noi negli ultimi 2 anni o giù di lì. – fisherja

Problemi correlati