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);
}
}
}
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. –
Ich rief preferencePage.setValid (false); und es hat nicht die Anwenden und OK-Tasten – wearybands
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