Java 获取首选项页面中的应用按钮+;swt日食

Java 获取首选项页面中的应用按钮+;swt日食,java,eclipse,swt,preferences,Java,Eclipse,Swt,Preferences,我有MyPreferencePage,它扩展了PreferencePage。在PreferencePage中有一个方法getApplyButton(),我正在重写该方法以获取apply按钮 我需要应用按钮,因为有一些验证器,我把数据在首选项对话框,直到所有的数据是不正确的,我不希望应用按钮被启用 我的代码 public class DefaultColorsPreferencePage extends PreferencePage implements IWorkbenchPreference

我有MyPreferencePage,它扩展了PreferencePage。在PreferencePage中有一个方法getApplyButton(),我正在重写该方法以获取apply按钮

我需要应用按钮,因为有一些验证器,我把数据在首选项对话框,直到所有的数据是不正确的,我不希望应用按钮被启用

我的代码

 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();
     }
 }
//方法创建表的列

     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 
  }
//栏目编辑支持

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);
    }
 }
}

您无法访问应用按钮来启用/禁用首选项页面。相反,打电话给

setValid(false);
禁用应用和确定的
首选项页面的方法

页面正常时调用
setValid(true)


您可能还需要调用
setErrorMessage
setMessage
方法来设置页面无效时的消息。

您无法访问应用按钮来启用/禁用首选项页面。相反,打电话给

setValid(false);
禁用应用和确定的
首选项页面的方法

页面正常时调用
setValid(true)


您可能还需要调用
setErrorMessage
setMessage
方法来设置页面无效时的消息。

您可以在任何需要更改页面有效性的地方调用它。例如,在页面控件上的createContents或任何modify listener中,我调用了preferencePage.setValid(false);它没有禁用Apply和Ok按钮我在首选项页面中有一个表,在一列上我有编辑支持,当用户在该列中输入一些值时,我验证它,如果它不正确,那么我想禁用Apply按钮,检查更新的codesetValid是否确实有效。你必须向我们展示一个完整的偏好页面,看看你做错了什么。这不是,我不能拿这个来测试它。编辑支持
preferencePage.setValid(false)中的
preferencePage
是什么例如?无论如何,这不是调试服务。在编辑支持中调用
setValid
效果很好,我只是在我的一个首选项页面表中尝试了它。您可以在任何需要更改页面有效性的地方调用它。例如,在页面控件上的createContents或任何modify listener中,我调用了preferencePage.setValid(false);它没有禁用Apply和Ok按钮我在首选项页面中有一个表,在一列上我有编辑支持,当用户在该列中输入一些值时,我验证它,如果它不正确,那么我想禁用Apply按钮,检查更新的codesetValid是否确实有效。你必须向我们展示一个完整的偏好页面,看看你做错了什么。这不是,我不能拿这个来测试它。编辑支持
preferencePage.setValid(false)中的
preferencePage
是什么例如?无论如何,这不是调试服务。在编辑支持中调用
setValid
效果很好,我只是在我的一个首选项页表中尝试过。