2013-05-27 83 views
2

我在工具欄中有幾個SWT ToolItems,其樣式爲SWT.RADIO。我想使用toolItem.setSelection(false)以編程方式取消所有這些選項,但這是不可能的。當前選擇的ToolItem仍處於選中狀態。我可以使用toolItem.setSelection(true)選擇另一個ToolItem,這將取消選擇第一個,但是我找不到一個方法來取消選擇它們,但是當GUI啓動時,所有這些都被取消選擇。有誰知道如何取消全部選擇?取消選擇組中的所有SWT單選按鈕

更新:我想通了,是什麼問題:我查@rgeorge發現toolItem.setSelection(false)作品,如果工具欄與池莉構建ToolBar toolBar = new ToolBar(shell)。但是,如果我使用Mac上的(窗口框架統一工具欄)上的shell.getToolBar()可以獲取的工具欄,則它不起作用。看起來像SWT不兼容。下面是一些代碼重現效果(改變useShellToolbar在Mac上的情況之間切換):

// taken from SWT Snippet47 
package org.eclipse.swt.snippets; 

import org.eclipse.swt.*; 
import org.eclipse.swt.graphics.*; 
import org.eclipse.swt.widgets.*; 

public class ToolbarRadioButtonGroupTest { 

public static void main (String [] args) { 

    boolean useShellToolBar = true; 

    Display display = new Display(); 
    Shell shell = new Shell (display); 

    Image image = new Image (display, 20, 20); 
    Color color = display.getSystemColor (SWT.COLOR_BLUE); 
    GC gc = new GC (image); 
    gc.setBackground (color); 
    gc.fillRectangle (image.getBounds()); 
    gc.dispose(); 

    Image image2 = new Image (display, 20, 20); 
    color = display.getSystemColor (SWT.COLOR_GREEN); 
    gc = new GC (image2); 
    gc.setBackground (color); 
    gc.fillRectangle (image2.getBounds()); 
    gc.dispose(); 

    ToolBar bar = null; 
    if (useShellToolBar){ 
     bar = shell.getToolBar(); 
    }else{ 
     bar = new ToolBar (shell, SWT.BORDER | SWT.FLAT); 
    } 

    Rectangle clientArea = shell.getClientArea(); 
    bar.setBounds (clientArea.x, clientArea.y, 200, 32); 
    int number = 3; 
    final ToolItem[] items = new ToolItem[number]; 
    for (int i=0; i<number; i++) { 
     ToolItem item = new ToolItem (bar, SWT.RADIO); 
     item.setImage (image); 
     items[i] = item; 
    } 

    ToolItem sep = new ToolItem(bar, SWT.SEPARATOR); 

    ToolItem push = new ToolItem(bar, SWT.PUSH); 
    push.setImage(image2); 
    push.addListener(SWT.Selection, new Listener(){ 

     @Override 
     public void handleEvent(Event event) { 
      for (ToolItem toolItem : items) { 
       toolItem.setSelection(false); 
      } 

     } 

    }); 

    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) display.sleep(); 
    } 
    image.dispose(); 
    image2.dispose(); 
    display.dispose(); 
} 
} 
+2

全部取消選擇?一次只能在按鈕組中選擇一個單選按鈕... –

+2

如果您希望全部取消選中,您需要使用複選框或其他控件。 radiibuttons分組時將_always_具有固有選擇的按鈕。 – Brian

+0

我是SWT的新手,但通過收音機項目迭代的toolItem.setSelection(false)似乎適用於我。請粘貼一些代碼。我正在使用Juno自帶的SWT版本。 – rgeorge

回答

0
btnB.setSelection(false); 

你需要做的每一個按鈕,那麼你將取消選擇所有這些,嘗試使用buttonname.optionName(optionargs); experementing

相關問題