在swt viewer栏中加入一个table,可以增加和删除行,第一行是两个输入框,第二行是两个按钮,完整代码和注释
时间: 2023-09-02 21:14:45 浏览: 41
下面是一个简单的 SWT Viewer 示例,包含一个 Table,可以增加和删除行。第一行是两个文本框,第二行是两个按钮。
```java
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class TableViewerExample {
private TableViewer viewer;
private Table table;
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
TableViewerExample example = new TableViewerExample();
example.createPartControl(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public void createPartControl(Composite parent) {
// 创建 TableViewer
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
table = viewer.getTable();
// 创建表格列
TableViewerColumn column1 = new TableViewerColumn(viewer, SWT.NONE);
column1.getColumn().setWidth(100);
column1.getColumn().setText("Name");
TableViewerColumn column2 = new TableViewerColumn(viewer, SWT.NONE);
column2.getColumn().setWidth(100);
column2.getColumn().setText("Age");
// 设置表格布局
table.setHeaderVisible(true);
table.setLinesVisible(true);
// 设置内容提供器
viewer.setContentProvider(ArrayContentProvider.getInstance());
// 设置标签提供器
viewer.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Person person = (Person) element;
switch (columnIndex) {
case 0:
return person.getName();
case 1:
return person.getAge() + "";
}
return super.getText(element);
}
});
// 设置输入
viewer.setInput(getInitialInput());
// 添加第一行:两个输入框
TableItem item1 = new TableItem(table, SWT.NONE);
Text nameText = new Text(table, SWT.BORDER);
item1.setText(new String[] {"Name:", ""});
viewer.getCellEditors()[0] = new TextCellEditor(nameText);
Text ageText = new Text(table, SWT.BORDER);
item1.setText(new String[] {"Age:", ""});
viewer.getCellEditors()[1] = new TextCellEditor(ageText);
// 添加第二行:两个按钮
TableItem item2 = new TableItem(table, SWT.NONE);
Button addButton = new Button(table, SWT.PUSH);
addButton.setText("Add");
addButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// 添加一个新的 Person 对象
Person person = new Person(nameText.getText(), Integer.parseInt(ageText.getText()));
viewer.add(person);
}
});
Button deleteButton = new Button(table, SWT.PUSH);
deleteButton.setText("Delete");
deleteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// 删除选中的 Person 对象
IStructuredSelection selection = viewer.getStructuredSelection();
Object[] objects = selection.toArray();
for (Object object : objects) {
viewer.remove(object);
}
}
});
}
private Person[] getInitialInput() {
return new Person[] {
new Person("Alice", 20),
new Person("Bob", 30),
new Person("Charlie", 40),
};
}
private static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
}
```
上述代码中,我们首先创建了一个 TableViewer 和一个 Table,然后设置了表格的布局、内容提供器和标签提供器。接着,我们添加了两行内容,第一行是两个文本框,第二行是两个按钮。在按钮的点击事件处理方法中,我们可以添加或删除 Person 对象。最后,我们提供了一个简单的 Person 类,用于存储数据。