swt学习:tableViewer 加入行不显示
小弟刚学swt,一下子碰到了好多问题,头都大了,希望高手能帮我解决,谢谢。tableViewer加入行不显示。A第一个java中的部分,就是给tableViewer的设置...
小弟刚学swt,一下子碰到了好多问题,头都大了,希望高手能帮我解决,谢谢。tableViewer 加入行不显示。
A第一个java中的部分,就是给tableViewer的设置,点button增加一行。
tableViewer.setContentProvider(new FifoIStructuredContentProvider());
tableViewer.setLabelProvider(new FifoITableLabelProvider());
tableViewer.setInput(Fifo.getFifos());
tableViewer.refresh();
//这是button的动作:
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
Fifo fifo1 = new Fifo("Name",new Integer(4),new Integer(5));
Fifo.getFifos().add(fifo1);//就是这里不行啊!为什么加不上?也不显示?
tableViewer.refresh();
}
});
第二个Java:
package jc;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
public class FifoITableLabelProvider extends LabelProvider implements
ITableLabelProvider {
public String getColumnText(Object element, int columnIndex) {
if (element instanceof Fifo) {
Fifo o = (Fifo)element;
switch (columnIndex) {
case 0:
return o.getName();
case 1:
return o.getComeTime()+"";
case 2:
return o.getNeedTime()+"";
}
}
return null;
}
public Image getImage(Object element) {
// TODO 自动生成方法存根
return null;
}
public String getText(Object element) {
// TODO 自动生成方法存根
return null;
}
public void addListener(ILabelProviderListener listener) {
// TODO 自动生成方法存根
}
public void dispose() {
// TODO 自动生成方法存根
}
public boolean isLabelProperty(Object element, String property) {
// TODO 自动生成方法存根
return false;
}
public void removeListener(ILabelProviderListener listener) {
// TODO 自动生成方法存根
}
public Image getColumnImage(Object element, int columnIndex) {
// TODO 自动生成方法存根
return null;
}
}
第三个JAVA:
package jc;
import java.util.List;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
public class FifoIStructuredContentProvider implements
IStructuredContentProvider {
public Object[] getElements(Object inputElement) {
if (inputElement instanceof List) {
return ((List)inputElement).toArray();
} else {
return new Object[0];
}
}
/**
* Disposes any created resources
*/
public void dispose() {
// Do nothing
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO 自动生成方法存根
}
/**
* Called when the input changes
*/
}
第四个JAVA
package jc;
import java.util.ArrayList;
import java.util.List;
public class Fifo {
private String name;// 名称
private Integer cometime;// 到来时间
private Integer needime;// 运行时间
private Integer starttime;// 开始时间
private Integer stoptime;// 结束时间
private Integer state;// 状态
public Fifo(String name, Integer cometime, Integer needime) {
this.name = name;
this.cometime = cometime;
this.needime = needime;
}
public String getName() {
return this.name;
}
//以下全是get...和set...
下面是这样的:
public static List<Fifo> getFifos() {
List<Fifo> fifoList = new ArrayList<Fifo>();
Fifo something = new Fifo("name", new Integer(3), new Integer(5));
fifoList.add(something);
return fifoList;
}
}
问题:点了button后,没有反应,只有name,3,5这一行,为什么第一个Java里面的Fifo.getFifos().add(fifo1)后没有反应呢?tableViewer.refresh()也有了。非常急啊,谢谢了!! 展开
A第一个java中的部分,就是给tableViewer的设置,点button增加一行。
tableViewer.setContentProvider(new FifoIStructuredContentProvider());
tableViewer.setLabelProvider(new FifoITableLabelProvider());
tableViewer.setInput(Fifo.getFifos());
tableViewer.refresh();
//这是button的动作:
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
Fifo fifo1 = new Fifo("Name",new Integer(4),new Integer(5));
Fifo.getFifos().add(fifo1);//就是这里不行啊!为什么加不上?也不显示?
tableViewer.refresh();
}
});
第二个Java:
package jc;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
public class FifoITableLabelProvider extends LabelProvider implements
ITableLabelProvider {
public String getColumnText(Object element, int columnIndex) {
if (element instanceof Fifo) {
Fifo o = (Fifo)element;
switch (columnIndex) {
case 0:
return o.getName();
case 1:
return o.getComeTime()+"";
case 2:
return o.getNeedTime()+"";
}
}
return null;
}
public Image getImage(Object element) {
// TODO 自动生成方法存根
return null;
}
public String getText(Object element) {
// TODO 自动生成方法存根
return null;
}
public void addListener(ILabelProviderListener listener) {
// TODO 自动生成方法存根
}
public void dispose() {
// TODO 自动生成方法存根
}
public boolean isLabelProperty(Object element, String property) {
// TODO 自动生成方法存根
return false;
}
public void removeListener(ILabelProviderListener listener) {
// TODO 自动生成方法存根
}
public Image getColumnImage(Object element, int columnIndex) {
// TODO 自动生成方法存根
return null;
}
}
第三个JAVA:
package jc;
import java.util.List;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
public class FifoIStructuredContentProvider implements
IStructuredContentProvider {
public Object[] getElements(Object inputElement) {
if (inputElement instanceof List) {
return ((List)inputElement).toArray();
} else {
return new Object[0];
}
}
/**
* Disposes any created resources
*/
public void dispose() {
// Do nothing
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO 自动生成方法存根
}
/**
* Called when the input changes
*/
}
第四个JAVA
package jc;
import java.util.ArrayList;
import java.util.List;
public class Fifo {
private String name;// 名称
private Integer cometime;// 到来时间
private Integer needime;// 运行时间
private Integer starttime;// 开始时间
private Integer stoptime;// 结束时间
private Integer state;// 状态
public Fifo(String name, Integer cometime, Integer needime) {
this.name = name;
this.cometime = cometime;
this.needime = needime;
}
public String getName() {
return this.name;
}
//以下全是get...和set...
下面是这样的:
public static List<Fifo> getFifos() {
List<Fifo> fifoList = new ArrayList<Fifo>();
Fifo something = new Fifo("name", new Integer(3), new Integer(5));
fifoList.add(something);
return fifoList;
}
}
问题:点了button后,没有反应,只有name,3,5这一行,为什么第一个Java里面的Fifo.getFifos().add(fifo1)后没有反应呢?tableViewer.refresh()也有了。非常急啊,谢谢了!! 展开
展开全部
看了一下你的觉得有点问题!
1是你事件监听里面只是取得了数据而没有添加到tableView里面
2是你的Fifo类的fifoList产生的也有点问题
我把你这两个类改了,第一个类我不知道你的button在哪里,所以我在table上加了个双击事件,双击就会增加内容.
TableViewer1Class:
import org.eclipse.jface.window.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class TableViewer1Class extends ApplicationWindow {
TableViewer tv;
Fifo fifo1 = new Fifo("Name",new Integer(4),new Integer(5)); ;
public TableViewer1Class() {
super(null);
}
public void run() {
setBlockOnOpen(true);
open();
Display.getCurrent().dispose();
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText("TableViewer实例");
shell.setSize(400, 200);
}
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, false));
//定义一个TableViewer对象
tv = new TableViewer(composite, SWT.FULL_SELECTION);
// 设置Table
Table table = tv.getTable();
table.setLayoutData(new GridData(GridData.FILL_BOTH));
// 定义表中的列
TableColumn Col1 = new TableColumn(table, SWT.LEFT);
Col1.setText("姓名");
// 设置列宽度
Col1.setWidth(60);
TableColumn Col2 = new TableColumn(table, SWT.LEFT);
Col2.setText("第一个数");
Col2.setWidth(60);
TableColumn Col3 = new TableColumn(table, SWT.LEFT);
Col3.setText("第二个数");
Col3.setWidth(60);
// 显示表头
table.setHeaderVisible(true);
// 显示表格线
table.setLinesVisible(true);
tv.setContentProvider(new FifoIStructuredContentProvider());
tv.setLabelProvider(new FifoITableLabelProvider());
//tv.setInput(Fifo.getFifos());
tv.refresh();
//这是button的动作:
table.addListener(SWT.MouseDoubleClick, new Listener(){
public void handleEvent(Event event) {
tv.setInput(Fifo.getFifos());
tv.refresh();
}
});
return composite;
}
public static void main(String[] args) {
new TableViewer1Class().run();
}
}
2 Fifo:
import java.util.ArrayList;
import java.util.List;
public class Fifo {
private String name;// 名称
private Integer comeTime;// 到来时间
private Integer needTime;// 运行时间
private Integer starttime;// 开始时间
private Integer stoptime;// 结束时间
private Integer state;// 状态
static List<Fifo> fifoList = new ArrayList<Fifo>();
public Fifo(String name, Integer cometime, Integer needime) {
this.name = name;
this.comeTime = cometime;
this.needTime = needime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getStarttime() {
return starttime;
}
public void setStarttime(Integer starttime) {
this.starttime = starttime;
}
public Integer getStoptime() {
return stoptime;
}
public void setStoptime(Integer stoptime) {
this.stoptime = stoptime;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public static List<Fifo> getFifos() {
Fifo something = new Fifo("name", new Integer(3), new Integer(5));
fifoList.add(something);
return fifoList;
}
public Integer getComeTime() {
return comeTime;
}
public void setComeTime(Integer comeTime) {
this.comeTime = comeTime;
}
public Integer getNeedTime() {
return needTime;
}
public void setNeedTime(Integer needTime) {
this.needTime = needTime;
}
}
1是你事件监听里面只是取得了数据而没有添加到tableView里面
2是你的Fifo类的fifoList产生的也有点问题
我把你这两个类改了,第一个类我不知道你的button在哪里,所以我在table上加了个双击事件,双击就会增加内容.
TableViewer1Class:
import org.eclipse.jface.window.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class TableViewer1Class extends ApplicationWindow {
TableViewer tv;
Fifo fifo1 = new Fifo("Name",new Integer(4),new Integer(5)); ;
public TableViewer1Class() {
super(null);
}
public void run() {
setBlockOnOpen(true);
open();
Display.getCurrent().dispose();
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText("TableViewer实例");
shell.setSize(400, 200);
}
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, false));
//定义一个TableViewer对象
tv = new TableViewer(composite, SWT.FULL_SELECTION);
// 设置Table
Table table = tv.getTable();
table.setLayoutData(new GridData(GridData.FILL_BOTH));
// 定义表中的列
TableColumn Col1 = new TableColumn(table, SWT.LEFT);
Col1.setText("姓名");
// 设置列宽度
Col1.setWidth(60);
TableColumn Col2 = new TableColumn(table, SWT.LEFT);
Col2.setText("第一个数");
Col2.setWidth(60);
TableColumn Col3 = new TableColumn(table, SWT.LEFT);
Col3.setText("第二个数");
Col3.setWidth(60);
// 显示表头
table.setHeaderVisible(true);
// 显示表格线
table.setLinesVisible(true);
tv.setContentProvider(new FifoIStructuredContentProvider());
tv.setLabelProvider(new FifoITableLabelProvider());
//tv.setInput(Fifo.getFifos());
tv.refresh();
//这是button的动作:
table.addListener(SWT.MouseDoubleClick, new Listener(){
public void handleEvent(Event event) {
tv.setInput(Fifo.getFifos());
tv.refresh();
}
});
return composite;
}
public static void main(String[] args) {
new TableViewer1Class().run();
}
}
2 Fifo:
import java.util.ArrayList;
import java.util.List;
public class Fifo {
private String name;// 名称
private Integer comeTime;// 到来时间
private Integer needTime;// 运行时间
private Integer starttime;// 开始时间
private Integer stoptime;// 结束时间
private Integer state;// 状态
static List<Fifo> fifoList = new ArrayList<Fifo>();
public Fifo(String name, Integer cometime, Integer needime) {
this.name = name;
this.comeTime = cometime;
this.needTime = needime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getStarttime() {
return starttime;
}
public void setStarttime(Integer starttime) {
this.starttime = starttime;
}
public Integer getStoptime() {
return stoptime;
}
public void setStoptime(Integer stoptime) {
this.stoptime = stoptime;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public static List<Fifo> getFifos() {
Fifo something = new Fifo("name", new Integer(3), new Integer(5));
fifoList.add(something);
return fifoList;
}
public Integer getComeTime() {
return comeTime;
}
public void setComeTime(Integer comeTime) {
this.comeTime = comeTime;
}
public Integer getNeedTime() {
return needTime;
}
public void setNeedTime(Integer needTime) {
this.needTime = needTime;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询