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);
}
}
}