2012-10-16 116 views
1

我們有一個自定義控件,基本上是一個帶有標籤和按鈕的複合材料。目前當用戶按下「Tab」時,焦點進入按鈕。SWT中的可對焦複合材料

如何讓複合材料獲得焦點並將焦點排除在外的按鈕?例如。用戶應該能夠瀏覽所有的自定義控件,而不是停在按鈕上。

更新時間:我們的控件樹是這個樣子:

  • 主窗格
    • CustomPanel1
      • 標籤
      • 按鈕
    • CustomPanel2
      • 標籤
      • 按鈕
    • CustomPanel3
      • 標籤
      • 按鈕

所有CustomPanel的是相同的複合子類。我們需要的是讓選項卡在這些面板之間循環,並且不要「看見」按鈕(這些是唯一可調焦的組件)

+0

這種方法的好處是什麼?當用戶選擇下一個「Composite」時,他/她能夠做什麼而不關注「Widget」? – Baz

+0

@Baz我們將在另一個組件中顯示一些數據並接受鍵盤輸入。 – Eugene

回答

2

您可以使用Composite#setTabList(Control[])定義Composite的選項卡順序。

這裏是將在Button小號onethree之間標籤忽略Button小號twofour一個小例子:

public static void main(String[] args) { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout(1, false)); 

    Composite content = new Composite(shell, SWT.NONE); 
    content.setLayout(new GridLayout(2, true)); 
    content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    final Button one = new Button(content, SWT.PUSH); 
    one.setText("One"); 

    final Button two = new Button(content, SWT.PUSH); 
    two.setText("Two"); 

    final Button three = new Button(content, SWT.PUSH); 
    three.setText("Three"); 

    final Button four = new Button(content, SWT.PUSH); 
    four.setText("Four"); 

    Control[] controls = new Control[] {one, three}; 

    content.setTabList(controls); 

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

EDIT:上述代碼可以很容易地被轉換成適合您的要求。我自己無法測試,因爲Composite s不是專注的,但你應該明白:

mainPane.setTabList(new Control[] {customPanel1, customPanel2, customPanel3 }); 

customPanel1.setTabList(new Control[] {}); 
customPanel2.setTabList(new Control[] {}); 
customPanel3.setTabList(new Control[] {}); 
+0

請參閱我的更新 - 希望這將清除我們的要求。 – Eugene

+0

@Eugene有用嗎? – Baz

+0

謝謝。最後,我已經回到了這個模塊,並且能夠使用這個功能 - 基本上,在我的複合材料中重寫setFocus時,我需要非常小心。 – Eugene