SWTケーブルにradioButtonを埋め込む


Javaコード:
    viewer = new TableViewer(container, SWT.FULL_SELECTION);  
      
    table = viewer.getTable();  
    table.setLinesVisible(true);  
      
    new TableColumn(table, SWT.None).setWidth(cw);  
      
    // column names  
    if (colNames == null) {  
        teamAmount = inputTeams.size();  
      
        colNames = new String[teamAmount + 1];  
      
        for (int i = 0; i < teamAmount; i++) {  
            colNames[i] = inputTeams.get(i).getName();  
        }  
        colNames[teamAmount] = "no team";  
    }  
      
    // column  
    TableItem col = new TableItem(table, SWT.None);  
    col.setText(0, "");  
      
    ch = col.getBounds().height;  
      
    Group group = new Group(table, SWT.None);  
    group.setBounds(col.getBounds().x + cw - 3, col.getBounds().y, cw  
            * (teamAmount + 1), ch * 2 + 1);  
      
    Button[] buttons = new Button[teamAmount + 1];  
    for (int i = 0; i <= teamAmount; i++) {  
        buttons[i] = new Button(group, SWT.None);  
        buttons[i].setText(colNames[i]);  
        buttons[i].setBounds(i * cw, 0, cw, ch * 2 + 1);  
        buttons[i].addSelectionListener(new colSelectionListener(i));  
    }  
    buttons[teamAmount].setText("no team");  
      
    TableEditor editor = new TableEditor(table);  
    editor.setEditor(group, col, 1);  
    editor.grabHorizontal = true;// have to  
      
    // no-use row  
    new TableItem(table, SWT.None);  
      
    // nodes  
    for (UserNode node : inputNodes) {  
        TableItem item = new TableItem(table, SWT.None);  
        item.setText(0, node.getName());  
        item.setData("node", node);  
        item.setData("col", teamAmount);  
      
        Group g = new Group(table, SWT.None);  
        g.setBounds(item.getBounds().x + cw - 3, item.getBounds().y, cw  
                * (teamAmount + 1), ch);  
        Button[] b = new Button[teamAmount + 1];  
        for (int i = 0; i <= teamAmount; i++) {  
            b[i] = new Button(g, SWT.RADIO);  
            b[i].setBounds(i * cw, 0, cw, ch);  
            b[i].setBackground(table.getBackground());  
            b[i].addSelectionListener(new nodeSelectionListener(item, i));  
        }  
        b[teamAmount].setText("no team");  
      
        item.setData("group", g);  
      
        editor.setEditor(g, item, 1);  
    }  

Javaコード:
	class colSelectionListener implements SelectionListener {

		int index;

		public colSelectionListener(int index) {
			this.index = index;
		}

		@Override
		public void widgetDefaultSelected(SelectionEvent e) {
			// TODO Auto-generated method stub
			widgetSelected(e);
		}

		@Override
		public void widgetSelected(SelectionEvent e) {
			// TODO Auto-generated method stub
			TableItem[] items = table.getItems();
			for (int i = 1; i <= nodeAmount; i++) {
				TableItem item = items[i + 1];
				item.setData("col", index);
				for (int j = 0; j <= equAmount; j++) {
					((Button) ((Group) item.getData("group")).getChildren()[j])
							.setSelection(j == index ? true : false);
				}
				if (index < equAmount) {
					if (!selectedNodes.contains(item)) {
						selectedNodes.add(item);
					}
				} else {
					if (selectedNodes.contains(item)) {
						selectedNodes.remove(item);
					}
				}
			}
		}
	}

Javaコード:
    class nodeSelectionListener implements SelectionListener {  
      
        TableItem item;  
        int index;  
      
        public nodeSelectionListener(TableItem item, int index) {  
            this.item = item;  
            this.index = index;  
        }  
      
        @Override  
        public void widgetDefaultSelected(SelectionEvent e) {  
            // TODO Auto-generated method stub  
            widgetSelected(e);  
        }  
      
        @Override  
        public void widgetSelected(SelectionEvent e) {  
            // TODO Auto-generated method stub  
            item.setData("col", index);  
            if (index == equAmount) {  
                if (selectedNodes.contains(item)) {  
                    selectedNodes.remove(item);  
                }  
            } else {  
                if (!selectedNodes.contains(item))  
                    selectedNodes.add(item);  
            }  
        }  
    }