swt学习:tableViewer 加入行不显示

swt学习:tableViewer 加入行不显示,第1张

看了一下你的觉得有点问题!

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.新建TableViewCell类,继承父类为UITableViewCell

1.1 "TableCell.h"

#import UIKit.h>

/**

* 房间桌子显示结构

* /

@interface TableCell : UITableViewCell {

  UILabel *tableNoLable// 桌子号

  UIImageView *tableImageView// 桌子图片

UIImageView *tableStateImageView// 桌子状态图片

@property (nonatomic ,retain) IBOutlet UILabel *tableNoLable// 桌子号

@property (nonatomic ,retain) IBOutlet UIImageView *tableImageView// 桌子图片

@property (nonatomic ,retain) IBOutlet UIImageView *tableStateImageView// 桌子状态图片

1.2 TableCell. m

#import "TableCell.h"

@implementation TableCell

@synthesize tableNoLable// 桌子号

@synthesize tableImageView// 桌子图片

@synthesize tableStateImageView// 桌子状态图片

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

// Initialization code

}

return self

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated]

// Configure the view for the selected state

}

- (void)dealloc {

[tableNoLable release]

[tableImageView release]

[hand3ImageView release]

[super dealloc]

}

@end

1.3 布置布局文件( xib 文件)指明 class 为自己定义的 tabelcellview

new 一个Empty Xib文件,其中不包含view, 在libriary中拖一个UITableCell到两个图标的框中,双击cellview,指明class为cell.m文件,开始编辑

2. 页面中在 tableView 中加载自己的 cell

#import "TableCell.h"

// 设置房间桌子数

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

[Util showLog:@"numberOfRowsInSection"]

return g_Room.wTableCount

}

// 设置单元格的高度

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

[Util showLog:@"heightForRowAtIndexPath"]

return kTableViewRowHeight

}

// 设置单元个样式

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

[Util showLog:@"cellForRowAtIndexPath start"]

static NSString *tableCellIdentifier = @"TableCellIdentifier"

TableCell *cell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:tableCellIdentifier]

[Util showLog:@"TableCellIdentifier"]

if(cell == nil){

NSArray *nib = [[NSBundle mainBundle]loadNibNamed:@"TableCell" owner:self options:nil]

for(id oneObject in nib){

if([oneObject isKindOfClass:[TableCell class]]){

cell = (TableCell *)oneObject

//***** 自己设计每个 cell 的内容,此函数会回调 table 的行数次,行数为 numberOfRowsInSection:(NSInteger)section 函数指定

// 显示桌子号码

NSUInteger row = [indexPath row] + 1

NSString *str =[NSString stringWithFormat:@"%d",row]

cell.tableNoLable.text = [[@" 第 " stringByAppendingString:str] stringByAppendingString:@" 桌 "]

[Util showLog:@"tableNoLable"]

if(deskshowFlg){

// 获取要绘画的桌子信息

Desk *tempDesk = [g_DeskArray objectAtIndex:[indexPath row]]

}

}

}

在UITableView中插入或者删除指定的行(或者节)使用的是如下几个API:

insertRowsAtIndexPath: withRowAnimation: 在指定位置插入行

deleteRowsAtIndexPath: withRowAnimation: 删除指定行

insertSections: withRowAnimation: 在指定位置插入节

deleteSections: withRowAnimation: 删除指定节

调用以上API之前,必须先调用beginUpdates,插入/删除数据完成后再调用endUpdates。

-(IBAction)addRows:(id)sender{

NSMutableArray *indexPaths = [[NSMutableArray alloc] init]

for (int i=0i<3i++) {

NSString *s = [[NSString alloc] initWithFormat:@”hello %d”,i]

[datas addObject:s]

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0]

[indexPaths addObject: indexPath]

}

[self.tableView beginUpdates]

[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewScrollPositionNone]

[self.tableView endUpdates]

}

-(IBAction)delRows:(id)sender{

NSMutableArray *indexPaths = [[NSMutableArray alloc] init]

[datas removeObjectAtIndex:0]

[indexPaths addObject:[NSIndexPath indexPathForRow:0 inSection:0]]

[self.tableView beginUpdates]

[self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]

[self.tableView endUpdates]

}

需要注意的是,调用insert函数时,需保证数据源添加的记录数要与你想插入的行的总数一致,如上面的例子中,想要插入的记录有3条,插入位置分 别为1,2,3,则对应的indexpPaths数组的元素总数为3,数组元素为一个NSIndexPath对象,通过它我们指定了记录的插入位置。删除 数据也是相同的道理。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11555253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存