在swt viewer栏中加入一个table,可以增加和删除行,第一列为ccombo控件,第二列和第三列为String,完整代码和注释
时间: 2023-09-03 19:05:49 浏览: 112
以下是一个简单的示例代码,演示如何在 SWT 视图器中添加一个表格,并实现增加和删除行的功能。第一列使用 `CCombo` 控件,第二列和第三列使用 `Text` 控件。
```java
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
public class TableExample {
private Shell shell;
private Table table;
public static void main(String[] args) {
Display display = new Display();
TableExample example = new TableExample();
example.open(display);
display.dispose();
}
public void open(Display display) {
shell = new Shell(display);
shell.setText("Table Example");
shell.setLayout(new GridLayout(1, false));
createTable();
createButtonBar();
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
private void createTable() {
table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// Create columns
TableColumn column1 = new TableColumn(table, SWT.NONE);
column1.setText("Column 1");
column1.setWidth(100);
TableColumn column2 = new TableColumn(table, SWT.NONE);
column2.setText("Column 2");
column2.setWidth(100);
TableColumn column3 = new TableColumn(table, SWT.NONE);
column3.setText("Column 3");
column3.setWidth(100);
// Add rows
for (int i = 0; i < 5; i++) {
TableItem item = new TableItem(table, SWT.NONE);
CCombo combo = new CCombo(table, SWT.READ_ONLY);
combo.add("Option 1");
combo.add("Option 2");
combo.add("Option 3");
combo.select(0);
item.setText(0, "");
item.setText(1, "");
item.setText(2, "");
combo.pack();
table.setEditor(combo, item, 0);
Text text1 = new Text(table, SWT.BORDER);
item.setText(1, "");
text1.pack();
table.setEditor(text1, item, 1);
Text text2 = new Text(table, SWT.BORDER);
item.setText(2, "");
text2.pack();
table.setEditor(text2, item, 2);
}
// Pack columns
for (int i = 0; i < table.getColumnCount(); i++) {
table.getColumn(i).pack();
}
}
private void createButtonBar() {
Composite buttonBar = new Composite(shell, SWT.NONE);
buttonBar.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, false));
buttonBar.setLayout(new GridLayout(2, false));
Button addButton = new Button(buttonBar, SWT.PUSH);
addButton.setText("Add Row");
addButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem item = new TableItem(table, SWT.NONE);
CCombo combo = new CCombo(table, SWT.READ_ONLY);
combo.add("Option 1");
combo.add("Option 2");
combo.add("Option 3");
combo.select(0);
item.setText(0, "");
item.setText(1, "");
item.setText(2, "");
combo.pack();
table.setEditor(combo, item, 0);
Text text1 = new Text(table, SWT.BORDER);
item.setText(1, "");
text1.pack();
table.setEditor(text1, item, 1);
Text text2 = new Text(table, SWT.BORDER);
item.setText(2, "");
text2.pack();
table.setEditor(text2, item, 2);
}
});
Button deleteButton = new Button(buttonBar, SWT.PUSH);
deleteButton.setText("Delete Row");
deleteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem[] selection = table.getSelection();
if (selection.length > 0) {
table.remove(table.indexOf(selection[0]));
}
}
});
}
}
```
这个示例包括 `createTable()` 和 `createButtonBar()` 方法。`createTable()` 方法创建一个带有三列的表格,第一列使用 `CCombo` 控件,第二列和第三列使用 `Text` 控件。它还添加了五行初始数据。
`createButtonBar()` 方法在表格下方创建一个按钮栏,其中包括一个 "Add Row" 按钮和一个 "Delete Row" 按钮。单击 "Add Row" 按钮将在表格的底部添加一行新数据,单击 "Delete Row" 按钮将删除所选的行。
阅读全文