在SWT

2015-08-20 31 views
0

添加selectListener表在SWT我想顯示Table有4列:1的數字,第二個字符串,第3複選框和第四單選按鈕。 一旦設置了所有行,我想爲第三列(全選/無)和第四列(選定乾淨無線電)添加另一行。在SWT

這是代碼(它編譯,但我沒有測試過,但):

//Create table 
Table table = new Table(layoutComposite, SWT.BORDER); 
table.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL)); 

String[] tableItems = new String[] {"", "Player", "Show", "Highlight"}; 
int[] tableSizes = new int[] {30, 150, 20, 20}; 

// Header Columns and sizes for table 
for (int i = 0; i < tableItems.length; i++) { 
    TableColumn tableColumn = new TableColumn(table, SWT.NONE); 
    tableColumn.setText(tableItems[i]); 
    tableColumn.setWidth(tableSizes[i]); 
} 
table.setHeaderVisible(true); 
table.setLinesVisible(false); 

// Create items (void) 
for (int i = 0; i < positions.size(); i++) { 
    new TableItem(table, SWT.NONE); 
} 

TableItem[] items = table.getItems(); 

// Check and Radio Buttons 
Button[] checks = new Button[items.length + 1]; 
Button[] radios = new Button[items.length + 1]; 

// Add elements 
for (int i = 0; i < items.length + 1; i++) { 
    // Pos and Player only in first items.length rows 
    if (i < items.length) { 
     items[i].setText(0, String.valueOf(positions.get(i).getPos())); 
     items[i].setText(1, positions.get(i).getPlayer().getPlayerName()); 
    } 
    TableEditor editorCheck = new TableEditor(table); 
    checks[i] = new Button(table, SWT.CHECK); 
    checks[i].pack(); 
    checks[i].setSelection(true); 
    editorCheck.minimumWidth = checks[i].getSize().x; 
    editorCheck.setEditor(checks[i], items[i], 2); 

    TableEditor radioCheck = new TableEditor(table); 
    radios[i] = new Button(table, SWT.RADIO); 
    radios[i].pack(); 
    radios[i].setSelection(false); 
    radioCheck.minimumWidth = radios[i].getSize().x; 
    radioCheck.setEditor(radios[i], items[i], 3); 
} 

table.addSelectionListener(new SelectionAdapter() { 
    @Override 
    public void widgetSelected(SelectionEvent e) { 
     if (e.detail == SWT.CHECK) { 
      if (e.item instanceof Button) { 

       // TODO: 
       // Get checked item selected 
       // If last row (ie: == checks[items.length]), select or unselect all check related buttons 
       // 

       //((Button)e.item).get // Problem here!!!! 
      } 
     } 
     else if (e.detail == SWT.RADIO) { 
       // TODO: 
       // Get radio selected 
       // If last row (ie: radios[items.length]), clean selected item (if any) 

     } 


     // TODO Auto-generated method stub 
     super.widgetSelected(e); 
    } 
}); 

現在我需要在複選和單選按鈕添加監聽器。我的問題是:如何知道選中了哪個檢查或單選按鈕? 我應該這樣做嗎?

for (int i = 0; i < checks.length; i++) { 
    if (e.item == checks[i]) { // found selected 
     if (i == checks.length -1) { // last one 
      // Select or unselect all 
     } 
     // doStuff() ; 
    } 
} 

如果這是正確的,是否有一種簡單的方法來知道哪個被選中?如果不是,我該怎麼做?

任何其他提示將非常受歡迎。

回答

1

創建後他們,你可以添加一個選擇偵聽到每個複選框,單選按鈕:

checks[i].addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent event) { 
     // your code here... 

     // get the current checkbox/radio button from the event: 
     Widget src = event.widget; 
     // ... 
     } 
    }); 

做同樣的單選按鈕:

radios[i].addSelectionListener(...); 

我希望這可以幫助你。請享用。

+0

謝謝,我會試試這種方式。儘管如此,這種解決方案是否像添加一個僅用於整個表的偵聽器一樣高效呢?哪個更好? – Albert

+0

添加監聽表中沒有趕上從按鈕 – CrocoB

+0

那麼,它認爲它的事件:[例1](http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/DetectaselectionorcheckeventinatableSWTCHECK.htm )和[例2](http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/SWTTableSimpleDemo.htm) – Albert