2013-06-04 2 views
18

SWT에서 집중 합성을 만들 수 있습니까? 디스플레이 필터를 통해 모든 키보드 이벤트를 포착 할 수 있지만 포커스가 트리 또는 목록에있을 때 몇 가지 문제가 있습니다. GTK +의 기본 동작은 컨트롤의 내용을 검색하는 것입니다.SWT에서 합성 포커스 가능하게 만들기

SWT와 AWT를 포커스가있는 AWT 구성 요소와 함께 사용하고 싶습니다. 필자는 AWT 위젯에 초점을 맞출 수 없도록 만들었고 AWT 구성 요소가 포커스가없는 경우에도 키보드 이벤트 (직접은 아니지만)를 수신하도록 표시 필터를 추가했습니다. 그러나 일부 SWT 컨트롤에 초점을 맞춘 경우 몇 가지 문제가 있습니다. 그 이유는 복합 포커스를 집중 가능하게 만들고 싶기 때문입니다.

그럼 마지막 질문은 SWT 합성물을 포커스 가능하게 만들 수 있습니까?

+1

그것은 아니다 :

class FocusableComposite extends Composite { public FocusableComposite(Composite parent, int style) { super(parent, style); } public boolean setFocus() { return super.forceFocus(); } } 

는 그 다음 Composite 클릭 할 때 직접마다) setFocus void 현재를 (전화 FocusableComposite의 새로운 인스턴스에 MouseListener를 사용 duplicate ... 위의 링크 된 주제에서 사용자는 완전히 다른 것을하려고합니다 ... 그는 Composite의 특정 컨트롤을 건너 뛰고 싶어합니다. 복합 키보드 포커스 가능하게하고 싶습니다. 아직 답이 없기 때문에 내 질문을 닫을 필요가 없습니다. – m4tx

+0

해당 질문의 요점은 정확하게 동일합니다 - 탭을 사용하여 복합체를 선택하십시오. 나는 당신이 그 질문 답장에서 해결책을 시도하는 것이 좋습니다 것입니다. – Eugene

+3

아니요 ... 탭으로 복합체를 선택하고 싶지 않습니다. 나는 합성 키보드 포커스 가능하게하고 싶다; (예를 들어, 텍스트 상자를 클릭 할 때처럼) 복합 잡기 키보드 이벤트를 클릭하여 만듭니다. 반복합니다 - 탭으로 선택하고 싶지 않습니다. 그리고 난 그 질문에 회신에서 솔루션을 시도 할 수 없다, 왜냐하면 나는 내 복합체 (또는, 정확히 말하면,이 SWT 복합체에 1 개의 AWT 컨트롤이 있지만 AWT를 만들고 싶지 않다. 그것이 많은 결함을 유발하기 때문에 집중력을 제어 할 수 있습니다 ...). – m4tx

답변

3

에 하위 위젯이 포함되어있는 경우 기본 동작은 선택한 경우 포커스를 포기하는 것입니다. 이 문제를 회피하기 위해, 등의 Composite 클래스를 확장하여 시작합니다

Composite composite = new FocusableComposite(shell, SWT.NONE); 

composite.addMouseListener(new MouseAdapter() 
{ 
    public void mouseDown(MouseEvent event) 
    { 
     ((Composite)event.widget).setFocus(); 
    } 
}); 
관련 문제