2011-08-31 3 views
3

J'ai une table SWT enveloppée par le JFace TableViewer, mais ce problème s'applique également à org.eclipse.swt.widgets.Table.Comment aligner à droite du texte dans une cellule de tableau SWT?

Lorsque j'utilise un StyledCellLabelProvider, le texte est toujours aligné à gauche, même quand j'utilise

colA.getColumn().setAlignment(SWT.RIGHT); 

Voici le fournisseur d'étiquettes et la configuration:

TableViewerColumn colA = new TableViewerColumn(measureTable, SWT.NONE); 
colA.setLabelProvider(new StyledCellLabelProvider() { 
    @Override 
    public void update(ViewerCell cell) { 
     ModelItem item = (ModelItem) cell.getElement(); 
     cell.setFont(FONT_REGISTRY.get(MY_SPECIAL_FONT)); 
     cell.setText(item.getText()); 
     super.update(cell); 
    } 
}); 

Toute sorte de solution de contournement serait génial . Par exemple, imbriquer un widget à l'intérieur de la table et aligner à droite le texte dans le widget en quelque sorte.

Plate-forme: Windows 7

Répondre

4

Vous avez trouvé un bogue dans StyledCellLabelProvider. Il ne se produira avec aucun autre CellLabelProvider.

StyledCellLabelProvider utilise "owner draw" pour dessiner les cellules Table. Cela signifie que le contenu de la cellule n'est pas dessiné nativement par le système d'exploitation. Il est dessiné dans un événement SWT.PaintItem par la table "owner".

StyledCellLabelProvider ne respecte pas l'alignement du TableColumn. Vous pouvez voir la source here, la méthode getTextLayoutForInfo(.) est d'intérêt.

Une solution pourrait être de copier cette classe, corriger le bug en ajoutant

TableColumn col = ((Table)viewer.getControl()).getColumn(cell.getColumnIndex()); 
layout.setAlignment(col.getAlignment()); 

dans la méthode getTextLayoutForInfo(.) (je n'ai pas testé ce correctif, mais si cela ne fonctionne pas, vous devriez obtenir le idée, et être en mesure de le faire fonctionner)

Vous devez également ajouter un rapport de bogue: Eclipse Bugzilla

+0

Je ne sais pas pourquoi je même en utilisant StyledCellLabelProvider, je viens de changer pour utiliser CellLabelProvider et l'alignement travaillé .. . Merci beaucoup. – geejay

Questions connexes