2017-04-03 26 views
0

나는 PreferencePage를 확장하는 MyPreferencePage를 가지고 있습니다. PreferencePage 안에 getApplyButton() 메서드가 있습니다.이 메서드를 재정 의하여 적용 단추를 얻습니다.환경 설정 페이지에서 적용 버튼을 얻으십시오 + swt eclipse

환경 설정 대화 상자의 데이터에 적용한 일부 유효성 검사기가 있고 모든 데이터가 올바르지 않을 때까지 적용 버튼이 필요합니다. 적용 버튼을 사용하지 않으려합니다.

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

답변

2

에 대한

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

// 방법 당신은 버튼을 적용 액세스하지 않습니다 환경 설정 페이지를 활성화/비활성화합니다. 대신 적용 및 확인을 비활성화 할 수 PreferencePage

setValid(false); 

메서드를 호출합니다.

페이지가 확인되면 setValid(true)으로 전화하십시오.

페이지가 유효하지 않은 동안에도 setErrorMessage 또는 setMessage 메서드를 호출하여 메시지를 설정할 수도 있습니다.

+0

페이지의 유효성을 원하는 곳 어디에서나 변경할 수 있습니다. 예를 들어 createContents 또는 페이지의 컨트롤에있는 모든 리스너를 수정합니다. –

+0

나는 preferencePage.setValid (false)를 호출했다. 그리고 그것은 적용 및 확인 버튼을 비활성화하지 않았다. – wearybands

+0

나는 환경 설정 페이지 안에 테이블을 가지고 있는데, 사용자가 해당 열에 값을 입력 할 때 편집 지원이있다. 유효하지 않다면 적용 버튼을 비활성화하고 싶다. , 업데이트 된 코드를 확인하십시오 – wearybands