List组件
list组件创建
List list = new List(shell, SWT.V_SCROLL);
list.setBounds(10, 10, 100, 180);
for (int i = 0; i < 20; i++) {
list.add("item: " + i);
}
具体效果如下,创建具有20个item的List,同时具有垂直滚轮

tip:
- 值得注意的是,为了创建滚轮样式,我才用了手动布局的方式,用通过setBounds()函数手动设置list大小,才创建出滚轮样式。如果采用了自动布局诸如FillLayout,RowLayout,很可能无法创建出滚轮样式
- 手动布局,意思就是创建shell时,不设置shell的布局方式。同时也不调用list.pack()。通过setBounds()来设置布局
list样式
| 样式常量 | 描述 | 效果 |
|---|---|---|
| SWT.SINGLE | 单行选择 | ![]() |
| SWT.MULTI | 同时选择多行 | ![]() |
| SWT.H_SCROLL | 水平滚轮 | ![]() |
| SWT.V_SCROLL | 垂直滚轮 | ![]() |
List小Demo
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
public class ListDemo2 {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setSize(450, 300);
shell.setText("hello world");
// 创建leftList
List leftList = new List(shell, SWT.MULTI | SWT.V_SCROLL);
leftList.setBounds(10, 10, 100, 180);
for (int i = 0; i < 20; i++) {
leftList.add("item: " + i);
}
// 创建rightList
List rightList = new List(shell, SWT.MULTI | SWT.V_SCROLL);
rightList.setBounds(300, 10, 100, 180);
// 右移按钮
Button right = new Button(shell,SWT.ARROW | SWT.RIGHT| SWT.BORDER);
right.setBounds(200, 50, 30, 30);
right.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// 确定leftList中选中的元素
int[] selectionIndices = leftList.getSelectionIndices();
// 添加右侧内容
for (String s : leftList.getSelection()) {
rightList.add(s);
}
// 删除左侧内容
leftList.remove(selectionIndices);
}
});
Button left = new Button(shell,SWT.ARROW | SWT.LEFT| SWT.BORDER);
left.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// 确定rightList中选中的元素
int[] selectionIndices = rightList.getSelectionIndices();
// 添加左侧内容
for (String s : rightList.getSelection()) {
leftList.add(s);
}
// 删除右侧内容
rightList.remove(selectionIndices);
}
});
left.setBounds(200, 100, 30, 30);
shell.open(); // 启动GUI
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
效果

demo实现的效果是,点击向右箭头按钮,将左侧选中内容移动到右侧;点击向左按钮,移动右侧选中item。
重要代码解释
// 创建leftList
List leftList = new List(shell, SWT.MULTI | SWT.V_SCROLL);
leftList.setBounds(10, 10, 100, 180);
for (int i = 0; i < 20; i++) {
leftList.add("item: " + i);
}
// 创建rightList
List rightList = new List(shell, SWT.MULTI | SWT.V_SCROLL);
rightList.setBounds(300, 10, 100, 180);
这段代码创建了两个List,因为他们绑定的父组件shell没有设定layout(布局),因此可以调用setBounds()手动设置list的位置,大小等布局信息。
// 右移按钮
Button right = new Button(shell,SWT.ARROW | SWT.RIGHT| SWT.BORDER);
right.setBounds(200, 50, 30, 30);
right.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// 确定leftList中选中的元素
int[] selectionIndices = leftList.getSelectionIndices();
// 添加右侧内容
for (String s : leftList.getSelection()) {
rightList.add(s);
}
// 删除左侧内容
leftList.remove(selectionIndices);
}
});
创建右移button,设置布局信息,同时绑定监听函数。点击按钮,实现将leftList中的选中内容移动到rightList中。
getSelectionIndices()返回选中内容的下标
getSelection()返回选中的内容
add(String s)添加内容
remove(int[] indices)根据下标删除内容
tip: remove有多个构造函数,按照下标删除速度相对较快
Button left = new Button(shell,SWT.ARROW | SWT.LEFT| SWT.BORDER);
left.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// 确定rightList中选中的元素
int[] selectionIndices = rightList.getSelectionIndices();
// 添加左侧内容
for (String s : rightList.getSelection()) {
leftList.add(s);
}
// 删除右侧内容
rightList.remove(selectionIndices);
}
});
left.setBounds(200, 100, 30, 30);
与上个模块类似,移动方向不同,故不再赘述
本文详细介绍了如何在EclipseSWT中使用List组件创建可滚动列表,包括手动布局以实现滚动条,以及通过按钮事件实现在两个List之间的双向数据传输。




476

被折叠的 条评论
为什么被折叠?



