2016-03-30 9 views
0

Ich verwende ein Nebelgitter, das einige Texte, Bilder und Checkboxen in verschiedenen Spalten enthält. Wenn ich Texte und Bilder zum Modell abbilden möchte, kann ich einfach getColumnText(Object e1, int c1) und getColumnImages(Object e1, int c1) von jface's ITableLabelProvider verwenden.Wie setze ich labelprovider für Checkboxen im Nebelgitter ein?

Ich möchte wissen, ob es eine ähnliche Möglichkeit gibt, Checkbox-Zustände basierend auf dem Modell im Nebelgitter zu setzen? Auf der Ansicht, ich kann dies wie folgt festgelegt:

GridItem item = grid.getItem(3); 
item.setChecked(2, true); 

Antwort

0

verwendete ich getColumnImages(Object element, int columnIndex) Methode von ITableLabelProvider Kontrollkästchen hinzuzufügen. Ich habe ein paar Bilder von checked und unchecked checkbox gefunden und die Auswahllogik in dieser Methode gesetzt. Dort ist es beschrieben http://www.vogella.com/tutorials/EclipseJFaceTable/article.html#jfaceeditor.

Dann habe ich EditingSupport für Spaltenbearbeitung implementiert und in seiner Methode getCellEditor(Object element) ich CheckboxCellEditor als Rückgabewert für Checkbox Spalte gesetzt.

public class CheckboxColumnEditor extends EditingSupport { 
    private GridTreeViewer gridViewer; 

    //... 

    @Override 
    protected void setValue(Object element, Object value) { 
    //... 

    getViewer().update(element, null); 
    } 

    @Override 
    protected Object getValue(Object element) { 
    //... 
    } 

    @Override 
    protected CellEditor getCellEditor(Object element) { 
    //... 
    return new CheckboxCellEditor(gridViewer.getGrid());  
} 
@Override 
protected boolean canEdit(Object element) { 
    //... 
} 
} 

Und dann für die Spalte zu schaffen Code:

GridColumn column = new GridColumn(parent, SWT.CENTER); 
//... 
GridViewerColumn gvc = new GridViewerColumn(gridViewer, column); 
gvc.setLabelProvider(new ColumnLabelProvider()); 
gvc.setEditingSupport(new CheckboxColumnEditor()); 

Werfen Sie einen Blick auf diese Antwort https://stackoverflow.com/a/13259350/1903580. Es gibt zwei Möglichkeiten, um Checkboxen hinzuzufügen.

+0

Im Vogelella-Artikel verwenden sie die JFace-Tabelle, die keine Checkbox-Unterstützung bietet (mit Ausnahme von CheckboxTableViewer, die nur Checkboxen vor jeder Zeile setzt). Aber das Nebelgitter bietet solche Unterstützung. Aus diesem Grund glaube ich nicht, dass die Verwendung von Checkbox-Bildern der einzige Weg sein sollte, wenn es so einfach ist, 'setChecked()' über 'GridItem' aufzurufen. – Shafi