SWT Table

2024-02-29 05:32
文章标签 table swt

本文主要是介绍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);



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/freesnail/archive/2009/05/19/4202529.aspx

这篇关于SWT Table的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757717

相关文章

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

css-table

设置table的文字不换行:给th,td添加white-space: nowrap; 设置单元格内容及其边框的距离:使用html的cellpadding属性,还有一种方式设置padding。在CSS中,table, th, td{padding:0;}效果等同于cellpadding="0″。 设置table的单元格边距:border-spacing如果定义一个 length 参数,那么定义的是水

react antd table expandable defaultExpandAllRows 不生效问题

原因:defaultExpandAllRows只会在第一次渲染时触发 解决方案:渲染前判断table 的datasource 数据是否已准备好 {pageList.length > 0 ? (<TablerowSelection={rowSelection}columns={columns}dataSource={pageList}style={{ marginTop: 24 }}pagina

el-table 封装表格(完整代码-实时更新)

最新更新时间: 2024年9月6号 1. 添加行内编辑、表头搜索 <template><!-- 简单表格、多层表头、页码、没有合并列行 --><div class="maintenPublictable"element-loading-background="rgba(255,255,255,0.5)"><!--cell-style 改变某一列行的背景色 --><!-- tree-props

@vueup/vue-quill使用quill-better-table报moduleClass is not a constructor

quill官方中文文档:https://www.kancloud.cn/liuwave/quill/1434144 扩展表格的使用 注意:想要使用表格 quill的版本要是2.0以后 升级到这个版本后 其他一些插件就注册不了了。 安装: npm install quill@latest   版本需要大于2.0版本 npm install quill-better-table 引入&

【0323】Postgres内核之 hash table sequentially search(seq_scan_tables、num_seq_scans)

0. seq scan tracking 我们在这里跟踪活跃的 hash_seq_search() 扫描。 需要这种机制是因为如果扫描正在进行时发生桶分裂(bucket split),它可能会访问两次相同的条目,甚至完全错过某些条目(如果它正在访问同一个分裂的桶中的条目)。因此,如果正在向表中插入数据,我们希望抑制桶分裂。 在当前的使用中,这种情况非常罕见,因此只需将分裂推迟到下一次插入即可。

table跨行跨列,字体大小

table跨行跨列,字体大小 <table width="100%"> <tr>         <td style="vertical-align:top"><font size="7">某某</font></td>         <td style="vertical-align:top" colspan="2" align="right"><font size="5">求职意向:W

Apache-Flink深度解析-Temporal-Table-JOIN

在《JOIN LATERAL》中提到了Temporal Table JOIN,本篇就向大家详细介绍什么是Temporal Table JOIN。在ANSI-SQL 2011 中提出了Temporal 的概念,Oracle,SQLServer,DB2等大的数据库厂商也先后实现了这个标准。Temporal Table记录了历史上任何时间点所有的数据改动,Temporal Table的工作流程如下: