2014-11-05 3 views
2

나는 EMF 모델을 가지고 있는데, 여기에서 UI 폼을 생성하고 마법사에 임베드했다.EMFForms에 의해 생성 된 부울 값을 입력하는 컨트롤의 배경색을 사용자 정의하는 방법은 무엇입니까?

확인란이 흰색 배경으로 표시되며 (아래 참조) 좋지 않습니다.

Screenshot

내가 체크 상자의 배경색 (흰색 스트립을 피)을 변경할 수 있습니다 어떻게

?

BooleanControlSWTRenderer 하위 클래스를 사용해 보았지만 (아래 참조) 작동하지 않았습니다.

public class MyRenderer extends BooleanControlSWTRenderer { 

    @Override 
    protected Control createSWTControl(Composite parent, Setting setting) { 


     final Button check = new Button(parent, SWT.CHECK); 
     check.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY)); 
     check.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_control_boolean"); //$NON-NLS-1$ 

     return check; 

    } 
} 

업데이트 1 (2014년 5월 11일 17시 12분 MSK) : 작동하지 않습니다 또한 here을 제안 check.setBackground(null)를 호출.

업데이트 2 (2014년 5월 11일 17시 34분 MSK) : 다음보기에서이

@Override 
protected Control createSWTControl(Composite parent, Setting setting) { 
    Button check = new Button(parent, SWT.CHECK); 

    check.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY)); 
    parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY)); 
    parent.setBackgroundMode(SWT.INHERIT_FORCE); 

    check.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_control_boolean"); //$NON-NLS-1$ 

    return check; 

} 

결과에 코드를 수정.

Screenshot 2

+0

'setForeground' 대신'setBackground'가 작동해야합니다. –

+0

그건 오타였습니다. 다시 setBackground로 변경하면 같은 결과를 얻습니다. –

답변

1

이것은 당신이 필요 아마 : 당신의 MyRenderer

@SuppressWarnings("restriction") 
public class MyRenderer extends BooleanControlSWTRenderer { 

    @Override 
    protected Control createSWTControl(final Composite parent, Setting setting) { 
     final Button check = new Button(parent, SWT.CHECK); 
     check.addPaintListener(new PaintListener() { 
      @Override 
      public void paintControl(PaintEvent arg0) { 
       check.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY)); 
      } 
     }); 
     return check; 

    } 
} 

의 차이는 우리가 additinal 해결 방법을 사용하고 페인트 리스너 due to this problem를 추가 여기에있다.

나는 이미 시도했는데 see this page을 사용했다.