2014-04-04 2 views
1

SWT 콤보를 편집 할 수 있습니다. 사용자는 드롭 다운 목록에서 항목을 선택하거나 새 텍스트를 입력 할 수 있습니다. 또한 내 코드는 일부 데이터 유효성 검사를 수행하고 입력 한 텍스트가 유효하지 않은 경우 입력 한 텍스트를 강조 표시하고 콤보로 포커스를 이동하려고합니다.SWT 편집 가능 콤보 - 강조 표시 텍스트

내 질문은 : 콤보에서 입력 한 모든 텍스트를 강조 표시하는 방법이 있습니까? 불행히도, 내가 생각하는 "selectText"메서드가 없습니다 ...

미리 감사드립니다.

내가 바즈의 제안을 시도했지만 별도의 테스트 프로젝트에 작동하는 동안 알 수없는 이유로 코드는 동일한 코드 내 프로그램에서 작동하지 않습니다

comboViewerRes = new ComboViewer(this, SWT.DROP_DOWN); 
    comboRes = comboViewerRes.getCombo(); 
    comboRes.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 
      1, 1)); 

    comboRes.addListener(SWT.KeyUp, new Listener() { 
     @Override 
     public void handleEvent(Event e) { 
      if (e.keyCode == SWT.SPACE) { 
       Rectangle bounds = comboRes.getBounds(); 
       Point point = new Point(bounds.x, bounds.x + bounds.width); 
       System.out.println(point); 
       comboRes.setSelection(point); 
      } 
     } 
    }); 
+0

어떤 사람은 그것을 고치고 대답 할 것입니다. –

답변

1

확인을 수행 할 직관적 인 방법이 없습니다 그러나 Combo에는 setSelection(Point)이라는 메서드가 있습니다. 이 메소드의 javadoc에는 다음과 같이 명시되어 있습니다.

수신자의 텍스트 필드에서 x 좌표가 선택 영역의 시작 부분이고 y 좌표가 선택 영역의 끝인 인수에 의해 지정된 범위로 설정합니다. 모든을 선택하기 위해

, 당신은 할 필요가 xCombo의 왼쪽 가장자리에의와 yCombo의 오른쪽 가장자리로 좌표를 설정하는 Point을 만드는 것입니다.

public static void main(String[] args) 
{ 
    final Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 
    shell.setText("ExpandBar Example"); 

    final ComboViewer viewer = new ComboViewer(shell, SWT.DROP_DOWN); 

    viewer.getCombo().addListener(SWT.KeyUp, new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      if(e.keyCode == SWT.SPACE) 
      { 
       Rectangle bounds = viewer.getCombo().getBounds(); 
       Point point = new Point(bounds.x, bounds.x + bounds.width); 
       viewer.getCombo().setSelection(point); 
      } 
     } 
    }); 

    viewer.setContentProvider(ArrayContentProvider.getInstance()); 
    viewer.setLabelProvider(new LabelProvider() 
    { 
     @Override 
     public String getText(Object element) 
     { 
      if (element instanceof String) 
      { 
       return element.toString(); 
      } 
      return super.getText(element); 
     } 
    }); 

    String[] persons = new String[] { "this", "is", "a", "test" }; 

    viewer.setInput(persons); 

    shell.pack(); 
    shell.open(); 

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

당신은 일반적으로 입력 할 수 있습니다 : 여기

은 코드 예입니다. 공백을 누르면 코드는 지금까지 입력 한 모든 항목을 선택합니다. 여기

는 스크린 샷입니다 :

enter image description here 사실 enter image description here

+0

코드는 그 자체로 잘 작동합니다. 그러나 ComboViewer를 사용하는 동일한 코드가 내 코드에서 작동하지 않습니다. 나는'Combo combo = comboViewer.getCombo();'를 시도한 다음 당신이 제안한대로 리스너를 추가했습니다. 런타임에는 아무 것도 발생하지 않았습니다. 'combo.setSelection' 라인이 실제로 실행되었습니다 (필자는'System.out.println (bounds);를 넣어 확인했습니다.) 왜 내 프로그램에서 작동하지 않는지 확신하지 못합니다.이 플러그인이 ComboViewer "기능"일 수 있습니까? ? – user3229864

+0

@ user3229864 글쎄, 당신이 궁금한 점은 콤보가 아닌 '콤보 뷰어'를 사용하고 있다고 명시하지 않았기 때문입니다. – Baz

+0

@ user3229864 업데이트 된 코드입니다. 이제는 '콤보 뷰어' 같은 코드가 여전히 잘 작동합니다. – Baz

0

, 내가 알아 낸 것은 combo.setSelection()는 첫 번째 인수로 텍스트 문자열의 시작 인덱스 지점을, 그리고 두 번째 인수해야한다는 것입니다 끝 색인, 즉 텍스트의 처음 두 문자를 선택하려면 및 모든 텍스트를 선택하십시오. combo.setSelection(new Point(0, combo.getText().length()));

왜 Baz가 아닌 user3229864에서 작동했는지는 B az의 콤보는 좌표가 0이고 user3229864는 좌표가 아닙니다.

희망이 도움이됩니다. 시도한 코드를 게시하십시오.