2012-09-14 4 views
2

4 개의 컴포지션이 순서대로 정렬되어 있습니다.복합 컨테이너에서 포커스 리스너 사용

각 합성에는 확인란, 레이블 및 2 개의 버튼이 있습니다. 이제 이러한 복합 재료가 차례로 정렬됩니다.

탭을 사용하여 하나의 컴포지트에서 다른 컴포지트로 이동할 때, 현재 컴포지트가 강조 표시되어야합니다. 이상적으로는 목록과 같이 작동하게하고 항목을 선택하면 강조 표시됩니다. 이것이 가능한가?

컴포지트는 다른 위젯, 컨트롤의 컨테이너 역할을한다는 것을 알고 있습니다. 내 요구 사항은 5 항목의 목록이 있고 목록의 각 항목에 확인란, 레이블 및 2 개의 단추가 있다는 것입니다. 나는 또한 그들이 선택 될 때 초점을 맞추기를 원할 것이다.

또한 위에서 설명한 동일한 UI에 대한 대체 솔루션을 알려 주시기 바랍니다.

+0

당신이이 [SSCCE] (http://www.sscce.org) 우리가 당신의 도전을 이해하는 데 도움이 제공 시겠어요 : 여기

전체 예입니다? – Baz

답변

1

탭을 컴포지트에서 컴포지트로 만들려면 각 컴포지트의 탭 목록을 탭 이후에 포커스가있는 하나의 컨트롤로 설정하십시오. 예를 들어, 확인란 :

composite.setTabList(new Control[]{checkButton}); 

하이라이트를 만들려면 상상력이 한계입니다. 배경을 변경하고 테두리를 추가하고 이름을 지정할 수 있습니다. 컴포지트의 컨트롤 중 하나에 포커스가있을 때마다 업데이트하면됩니다.

public static void main(String[] args) { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout(SWT.VERTICAL)); 

    createElement(shell); 
    createElement(shell); 
    createElement(shell); 
    createElement(shell); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
} 

private static void createElement(final Composite parent) { 
    final Composite composite = new Composite(parent, SWT.BORDER); 
    composite.setLayout(new GridLayout(4, false)); 
    final Button checkButton = new Button(composite, SWT.CHECK); 
    new Label(composite, SWT.NONE); 
    final Button button1 = new Button(composite, SWT.PUSH); 
    final Button button2 = new Button(composite, SWT.PUSH); 
    Listener listener = new Listener() { 
     @Override 
     public void handleEvent(Event event) { 
      for (Control control : parent.getChildren()) { 
       control.setBackground(null); 
      } 
      composite.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_RED)); 
      if (event.widget == button1 || event.widget == button2) { 
       checkButton.setFocus(); 
      } 
     } 
    }; 
    checkButton.addListener(SWT.FocusIn, listener); 
    button1.addListener(SWT.FocusIn, listener); 
    button2.addListener(SWT.FocusIn, listener); 
    composite.setTabList(new Control[]{checkButton}); 
} 
관련 문제