请问如何让数据库中的信息在RCP的表中显示呢?谢谢啦

 我来答
anrainie
2012-06-07 · TA获得超过1012个赞
知道小有建树答主
回答量:306
采纳率:0%
帮助的人:364万
展开全部
RCP的表格是指TableViewer的话
你应该会看到一个叫做setContentProvider的方法
你要知道,TableViewer是采用MVC结构的,M即是model,就是数据模型
所以,你需要创建一个对象,来保存从数据库里面获得的信息。
ContentProvider即是内容提供器,自己定义一个内容提供器,这就是MVC中的C,Controller,即是控制器。它的作用是,接受你的Model,然后提供给视图(Viewer,V)
视图就是你的TableViewer。

理解了以上,就可以完成一个表了。

所以,你需要看的是ContentProvider(内容提供,用于把模型转化为可接受的数据),LabelProvider(标签提供器,控制展示模式)

例子:
1、使用一个Table,createTableViewer是个自定义方法,代码在2。
ParaTableContentProvider是内容提供器,代码在3.
ParaTableLabelProvider是标签提供其,代码在4.
inParamList是模型列表,在代码2里可以找到对应的setInput(inParamList);方法。里面保存的对象是Param,一个定义的模型,代码在5.

TableViewer tableViewer = createTableViewer(table,
new ParaTableContentProvider(), new ParaTableLabelProvider(),
inParamList);

2、创建一个TableViewer的方法:
private TableViewer createTableViewer(Composite table,
ParaTableContentProvider paraTableContentProvider,
ParaTableLabelProvider paraTableLabelProvider, List<Param> paramList) {
TableViewer tv = null;
if (table instanceof Table)
tv = new TableViewer(table);
else {
for (Control child : table.getChildren()) {
if (child instanceof Table) {
tv = new TableViewer((Table) child);
}
}
}
tv.setUseHashlookup(true);
tv.setContentProvider(paraTableContentProvider);
tv.setLabelProvider(paraTableLabelProvider);
tv.setInput(paramList);
return tv;
}

3、内容提供器:

class ParaTableContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object inputElement) {
List<?> v = (ArrayList<?>) inputElement;
return v.toArray();
}

public void dispose() {
}

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}

4、标签提供器,获得列的显示文本,第一个参数是传进来的Element,在这个样例里,它是Param类型的。
class ParaTableLabelProvider implements ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
Param param = (Param) element;
switch (columnIndex) {
case 0:
return param.getValue(Param.KEY_Key);
case 1:
return param.getName();
case 2:
return param.getDefaultValue();
case 3:
int log = 0;
try {
log = Integer.parseInt(param.getLog());
} catch (Exception e) {

}
return BCDConstants.PARA_LOGS[log];
}
return null;
}

5、模型Param,你需要的就是为数据库的数据建立一个类似的模型,其实就是个实体JavaBean。

public class Param implements ICloneableEntry<Param> {

public static final String KEY_Log = "IsPrint";

public static final String KEY_EditType = "EditType";

public static final String KEY_Name = "Name";

public static final String KEY_Key = "Key";

public static final String KEY_DefaultValue = "DefaultValue";

public static final String KEY_Value = "Value";

private Map<String, String> values = new HashMap<String, String>();

public Param() {
}

public String getLog() {
return values.get(KEY_Log);
}

public String getName() {
return values.get(KEY_Name);
}

public Param setValue(String key, String value) {
values.put(key, value);
return this;
}

public String getParamValue() {
return values.get(KEY_Value);
}

public void removeValue(String key) {
values.remove(key);
}

public String getValue(String key) {
String value = values.get(key);
if (value == null)
value = "";
return value;
}

public String[] keys() {
return values.keySet().toArray(new String[0]);
}

public boolean equals(Object obj) {
if (obj == this)
return true;

if (obj instanceof Param) {
Param t = (Param) obj;
if (t.values.equals(this.values))
return true;
}
return false;
}

public Param clone() {
Param t = null;
try {
t = (Param) super.clone();
} catch (CloneNotSupportedException e) {
// e.printStackTrace();
}
if (t == null)
t = new Param();
for (String key : values.keySet()) {
t.setValue(key, values.get(key));
}
return t;
}

public Param copy() {
Param t = new Param();
for (String key : values.keySet()) {
t.setValue(key, values.get(key));
}
return t;
}

/**
* @param text
*/
public void setParamValue(String text) {
values.put(KEY_Value, text);
}

public String getDefaultValue() {
return values.get(KEY_DefaultValue);
}

public String toString() {
String value = getParamValue();
if (value == null) {
value = getDefaultValue();
}
return getName() + " : " + value;
}

}

楼主,你可以会觉得这么做很复杂,但是MVC模式的好处在于,你就麻烦这一次,以后你数据改变的时候,你不需要重新设计这个表,只需要对你的Model进行操作即可。
更多追问追答
追问
看不懂啊,我说的表就是在view上画的表,表已经建完了,就是不知道这个方法应该怎么写,谢谢啦
追答
扶额,能详细点么? 或者直接帖代码。

你是不是用TableItem那一套建的表。
如果是,你就只需要写个嵌套的循环生成TableItem即可。
来自:求助得到的回答
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式