2017-04-03 1 views
0

Ich habe MyPreferencePage, die PreferencePage erweitert. Innerhalb der PreferencePage gibt es eine Methode getApplyButton() Ich überschreibe diese Methode, um die Schaltfläche zum Anwenden zu erhalten.erhalten Sie die Schaltfläche in der Voreinstellung Seite + swt Eklipse

Ich brauche die Schaltfläche "Anwenden", weil es einige Validatoren gibt, die ich im Einstellungsdialog anlege und bis die Daten nicht korrekt sind. Ich möchte nicht, dass die Schaltfläche "Anwenden" aktiviert wird.

Mein Code

public class DefaultColorsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { 
    @Override 
    protected Control createContents(Composite parent) { 

    this.container = new Composite(parent, SWT.NONE); 
    this.container.setLayout(new GridLayout(1, false)); 
    GridData gd_area = new GridData(SWT.FILL, SWT.FILL, true, true); 
    this.container.setLayoutData(gd_area); 

    this.defalutColoringGroup = new Group(container, SWT.NONE); 
    this.defalutColoringGroup.setLayout(new GridLayout(1, false)); 
    this.defalutColoringGroup.setLayoutData(gd_area); 
    this.defalutColoringGroup.setText(Constants.DESCRIPTION_TEXT); 

    this.defaultColoringCheckBox = new Button(defalutColoringGroup, SWT.CHECK); 
    this.defaultColoringCheckBox.setText(Constants.DEFAULT_COLORING_BUTTON_TEXT); 

    errorLabel = new Label(defalutColoringGroup, SWT.NONE); 
    errorLabel.setText("Expression is not valid, enter a valid expression and try again!"); 
    errorLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED)); 
    errorLabel.setVisible(false); 

    this.viewer = tableviewerComposite.createTableViewer(defalutColoringGroup); 
    this.viewer.setContentProvider(new ArrayContentProvider()); 
    try { 
     contentProvider = new ContentProvider(); 
     this.viewer.setInput(contentProvider.getScenarios()); 
    } catch (ParserConfigurationException | SAXException | IOException e) { 
     e.printStackTrace(); 
    } 
    return container; 
    } 

    @Override 
    protected Button getApplyButton() { 
     super.getApplyButton(); 
    } 
} 

// Methode Spalten der Tabelle für die Spalte

public class ScenariosEditingSupport extends EditingSupport { 

private final TableViewer viewer; 
private final CellEditor editor; 
private final DefaultColorsPreferencePage preferencePage; 

public ScenariosEditingSupport(TableViewer viewer) { 
    super(viewer); 
    this.viewer = viewer; 
    this.editor = new TextCellEditor(viewer.getTable()); 
    this.preferencePage = new DefaultColorsPreferencePage(); 
} 

@Override 
protected CellEditor getCellEditor(Object element) { 
    return editor; 
} 

@Override 
protected boolean canEdit(Object element) { 
    return true; 
} 

@Override 
protected Object getValue(Object element) { 
    return ((Content) element).getExpression(); 
} 

@Override 
protected void setValue(Object element, Object changedExpression) { 
    String expression = String.valueOf(changedExpression); 

    if(Repository.isExpressionValid(expression)){ 
     ((Content) element).setExpression(expression); 
     viewer.update(element, null); 
    } 
    else{ 
     preferencePage.setValid(false); 
     preferencePage.setErrorMessage("Expression is not valid, enter a valid expression and try again!"); 
     ((Content) element).setExpression(expression); 
     viewer.update(element, null); 
    } 
} 
} 

Antwort

2

Sie greifen nicht auf die Schaltfläche Übernehmen

 private void createTableColumns(final TableViewer viewer,final Composite defalutColoringGroup) { 

    TableViewerColumn scenariosColumn = createTableViewerColumn(viewer,Constants.SCENARIOS_COLUMN_NAME,Constants.SCENARIOS_COLUMN_NUMBER); 
    ScenariosLabelProvider scenariosLabelProvider = new ScenariosLabelProvider(); 
    scenariosColumn.setLabelProvider(scenariosLabelProvider); 
    scenariosColumn.setEditingSupport(new ScenariosEditingSupport(viewer)); 

    //more columns 
    } 

// Unterstützung für die Bearbeitung erstellen um die Einstellungsseite zu aktivieren/deaktivieren. Anstatt das Gespräch

setValid(false); 

Methode von PreferencePage zu deaktivieren Übernehmen und OK.

Rufen Sie setValid(true), wenn die Seite in Ordnung ist. Sie können auch die Methoden setErrorMessage oder setMessage aufrufen, um eine Nachricht zu erstellen, während die Seite ungültig ist.

+0

Sie rufen es überall wo Sie die Gültigkeit der Seite ändern möchten. Zum Beispiel in createContents oder einem beliebigen Listener auf den Steuerelementen der Seite ändern. –

+0

Ich rief preferencePage.setValid (false); und es hat nicht die Anwenden und OK-Tasten – wearybands

+0

Ich habe eine Tabelle innerhalb der Einstellungsseite und auf einer Spalte habe ich Bearbeitungsunterstützung, wenn der Benutzer einen Wert in dieser Spalte geben, ich validiere es, wenn es nicht richtig ist, dann möchte ich die Schaltfläche anwenden deaktivieren Überprüfen Sie den aktualisierten Code – wearybands

Verwandte Themen