SWT Table

SWT TableTable是无法编辑的,若要创建出可编辑的 table,需要自行使用Composite与GirdLayout来开发)
1.创建简单的 Table
创建 Table就是创建出 Table类的对象,传入parent容器与样式属性。对该对象加入TableColumn这个类的对象来表示想要出现在 table中的字段。

Table t=new Table(s, SWT.BORDER);

创建 table字段主要有三个步骤:
1)对每个字段创建出TableColumn的对象。
2)使用SetText()对每个字段设置表头文字。
3)使用SetWidth()来设定每个字段的宽度。

TableColumn tc1=new TableColumn(t, SWT.CENTER);
TableColumn tc2=new TableColumn(t, SWT.CENTER);
TableColumn tc3=new TableColumn(t, SWT.CENTER);
tc1.setText("First Name");
tc2.setText("Last Name");
tc3.setText("Address");
tc1.setWidth(75);
tc2.setWidth(70);
tc3.setWidth(80);
t.setHeaderVisible(true);

TableColumn支持三种样式: SWT.CENTER、 SWT.RIGHT、 SWT.LEFT,这些样式决定了文字在每个字段中显示方式。

创建完 Table的表头后,需要通过TableItem类来加入数据到 Table中。

TableItem item1=new TableItem(t, SWT.NONE);
item1.setText(new String[]{"Tim","Hatton","Kentucky"});
TableItem item2=new TableItem(t, SWT.NONE);
item2.setText(new String[]{"Caitlyn","Warner","Ohio"});
TableItem item3=new TableItem(t, SWT.NONE);
item3.setText(new String[]{"Reese","Miller","Ohio"});
每个TableItem对象代表了 table中的一行且行中的每一栏都有一个值。数据是通过String数组加入TableItem中的。

2.字段表头与网格线的显示
字段表头的显示: t.setHeaderVisible(true);
网格线的显示: t.setLinesVisible(true);

3.强调选取行
在行中的某一栏被选取时,通过将跨字段的整行强调来给用户以整行被选取的视觉指示,可以使用 SWT.FULL_SELECTION这个样式即可。

4.允许选取多行
Table默认情况下只被允许选取一行。可以设定 SWT.MULTI样式来允许选取多行。在选取时必须通过按住ctrl键来进行多行选取。

5.程序化得选取项目
table的项目是可以被选取的,那就一定有方法来判断哪个项目被选取的,或者可以在没有用户介入的情况下让某个项目被选取。
Table通过getSelection()这个方法返回当前被选取的TableItem(一行数据)对象的数组。
TableItem []ti=t.getSelection();
Table是多重选取的,可以通过getSelectionIndices()返回int值的数组来以零基准索引指出哪些TableItem被选取。
int[] selected=t.getSelectionIndices();
Table为单选的,可以通过getSelectionIndex()返回当前被选取项目的索引。
int selected=t.getSelectionIndex();

6.Check样式
可以通过 SWT.CHECK样式在 table项目前加上一个checkbox,可以通过setChecked()方法来让项目成为checked,通过getChecked()方法判断项目的状态。
item3.setChecked(true);
boolean checked=item3.getChecked();

7.改变背景颜色

通过使用setBackground()来指定个别TableItem的背景颜色:item2.setBackground(new Color(d,127,178,127));

8.创建可以搜素和替换的 Table
虽然 Table这个类内置了通过键入cell中的文字的第一个字符来寻找项目的功能,但这还不足以提供完整的 Table搜索能力。还可以通过getText()和setText()对TableItem中的文字进行交互,完成寻找与替换功能。
import org.eclipse. swt. SWT;
import org.eclipse. swt.events.SelectionAdapter;
import org.eclipse. swt.events.SelectionEvent;
import org.eclipse. swt.graphics.Color;
import org.eclipse. swt.layout.*;
import org.eclipse. swt.widgets.*;


public class TableShell {
Display d;
Shell s;
public TableShell(){
d=new Display();
s=new Shell(d);
s.setSize(250,200);
s.setText(" Table Shell");
GridLayout g1=new GridLayout();
g1.numColumns=4;
s.setLayout(g1);
//create a table
final Table t=new Table(s, SWT.BORDER| SWT.FULL_SELECTION| SWT.CHECK| SWT.MULTI);
//create table header
final GridData gd=new GridData(GridData.FILL_BOTH);
gd.horizontalSpan=4;
t.setLayoutData(gd);

TableColumn tc1=new TableColumn(t, SWT.LEFT);
TableColumn tc2=new TableColumn(t, SWT.CENTER);
TableColumn tc3=new TableColumn(t, SWT.CENTER);
tc1.setText("First Name");
tc2.setText("Last Name");
tc3.setText("Address");
tc1.setWidth(75);
tc2.setWidth(70);
tc3.setWidth(80);
t.setHeaderVisible(true);
t.setLinesVisible(true);
//create table cell elements
final TableItem item1=new TableItem(t, SWT.NONE);
item1.setText(new String[]{"Tim","Hatton","Kentucky"});
TableItem item2=new TableItem(t, SWT.NONE);
item2.setText(new String[]{"Caitlyn","Warner","Ohio"});
TableItem item3=new TableItem(t, SWT.NONE);
item3.setText(new String[]{"Reese","Miller","Ohio"});

final Text find=new Text(s, SWT.SINGLE| SWT.BORDER);
final Text replace=new Text(s, SWT.SINGLE| SWT.BORDER);
final Button b=new Button(s, SWT.PUSH| SWT.BORDER);
b.setText("replace");
b.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
TableItem[] tia=t.getItems();
for(int i=0;i<tia.length;i++){
//搜索并替换第三列的数值
if(tia[i].getText(2).equals(find.getText()))
tia[i].setText(2,replace.getText());
}

}
});
s.open();
while(!s.isDisposed())
if(!d.readAndDispatch())
d.sleep();
d.dispose();
}
public static void main(String args[]){
new TableShell();
}
}

要想将 Table中的整行以新值取代旧值,可以再setText()中传入String对象的数组。数组中的每个元素会被用来替代调用setText()的TableItem中的单一cell:
String [] newText={"Nikki","Miller","Asia"};

item2.setText(newText);















先要设为table的layout
然后在其中建立TableColumn
最后在加入TableItem,也就是一个记录,一行
看看这里例子,是SWT/JFace in Action 书上的,推荐看下
 //Set up the table layout
    TableLayout layout = new TableLayout();
    layout.addColumnData(new ColumnWeightData(33, 75, true));
    layout.addColumnData(new ColumnWeightData(33, 75, true));
    layout.addColumnData(new ColumnWeightData(33, 75, true));
    Table table = new Table(parent, SWT.SINGLE);
    table.setLayout(layout);
    //Add columns to the table
    TableColumn column1 = new TableColumn(table, SWT.CENTER);
    TableColumn column2 = new TableColumn(table, SWT.CENTER);
    TableColumn column3 = new TableColumn(table, SWT.CENTER);
    TableItem item = new TableItem(table, SWT.NONE);
    item.setText( new String[] { "column 1", 
                                  "column 2", 
                                  "column 3" } );
    item = new TableItem(table, SWT.NONE);
    item.setText( new String[] { "a", "b", "c" } );



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个 SWT Table 带有 Combo 控件的增加和删除行的完整代码示例: ```java import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.*; public class TableWithComboExample { private static String[] COLORS = {"Red", "Green", "Blue"}; private static String[] SIZES = {"Small", "Medium", "Large"}; public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setText("Table with Combo Example"); shell.setLayout(new FillLayout()); // 创建表格控件 Table table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION); table.setHeaderVisible(true); table.setLinesVisible(true); // 创建表头 TableColumn colorColumn = new TableColumn(table, SWT.NONE); colorColumn.setText("Color"); TableColumn sizeColumn = new TableColumn(table, SWT.NONE); sizeColumn.setText("Size"); // 添加 Combo 编辑器到列中 final TableEditor colorEditor = new TableEditor(table); final Combo colorCombo = new Combo(table, SWT.READ_ONLY); colorCombo.setItems(COLORS); colorEditor.grabHorizontal = true; colorEditor.setEditor(colorCombo, null, 0); final TableEditor sizeEditor = new TableEditor(table); final Combo sizeCombo = new Combo(table, SWT.READ_ONLY); sizeCombo.setItems(SIZES); sizeEditor.grabHorizontal = true; sizeEditor.setEditor(sizeCombo, null, 1); // 添加行数据 for (int i = 0; i < 5; i++) { TableItem item = new TableItem(table, SWT.NONE); item.setText(0, COLORS[i % COLORS.length]); item.setText(1, SIZES[i % SIZES.length]); } // 添加增加行按钮 Button addButton = new Button(shell, SWT.PUSH); addButton.setText("Add Row"); addButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { TableItem item = new TableItem(table, SWT.NONE); item.setText(0, COLORS[0]); item.setText(1, SIZES[0]); } }); // 添加删除行按钮 Button removeButton = new Button(shell, SWT.PUSH); removeButton.setText("Remove Row"); removeButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { int selectionIndex = table.getSelectionIndex(); if (selectionIndex != -1) { table.remove(selectionIndex); } } }); shell.setSize(400, 300); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } } ``` 这个示例中,我们创建了一个带有两列的 SWT Table 控件,第一列是包含颜色选项的 Combo 控件,第二列是包含大小选项的 Combo 控件。然后我们添加了两个按钮来添加和删除行。当添加行时,我们将新行添加到表格的末尾并将第一列和第二列的文本设置为默认值。当删除行时,我们从选择的行开始删除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值