首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

KTable的简略使用方法

2014-01-05 
KTable的简单使用方法?如果您需要一种大容量(万行级别)的可编辑报表表格控件,那么KTable将是最佳选择。KTab

KTable的简单使用方法

?如果您需要一种大容量(万行级别)的可编辑报表表格控件,那么KTable将是最佳选择。KTable 是一个用java开发的,对控制报表的项目,它最大的特点是使用独特的算法,能支持巨大的报表。

一、概述

KTable是一种表格式的SWT控件,作者Friederich Kupzog和Lorenz Maierhofer。主要功能:

KTable的直接父类是Canvas。请看层次结构:

???

二、使用KTable

1.创建KTable

publicstaticvoid main(String[] args)

??? {

??????? // 创建shell

??????? Display display = new Display();

??????? Shell shell = new Shell(display);

??????? shell.setLayout(new FillLayout());

??????? shell.setText("KTable examples");

?

??????? // 创建选项卡

? ??????TabFolder tabFolder = new TabFolder(shell, SWT.NONE);

??????? TabItem item = new TabItem(tabFolder, SWT.NONE);

??????? item.setText("Text Table");

??????? Composite comp = new Composite(tabFolder, SWT.NONE);

??????? item.setControl(comp);

??????? comp.setLayout(new FillLayout());

?

??????? KTable table = new KTable(comp, SWT.FULL_SELECTION | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL

??????????????? | SWTX.FILL_WITH_LASTCOL | SWTX.EDIT_ON_KEY);

??????? table.setModel(new Object());

??????? shell.setSize(600, 600);

??????? shell.open();

??????? while (!shell.isDisposed())

??????? {

??????????? if (!display.readAndDispatch())

??????????????? display.sleep();

??????? }

??????? display.dispose();

??? }

创建完KTable后需要给KTable定义一个数据模型用公共方法setModel(KTableModel model)。才能显示数据,否则异常。

2.设置报表数据

KTable中有几种作者约定好的Model。当前我们用默认model。

class WKTableModel extends KTableDefaultModel

{

??? // 设置标题字体

??? privatefinal FixedCellRenderer m_fixedRenderer = new FixedCellRenderer(FixedCellRenderer.STYLE_FLAT

??????????? | TextCellRenderer.INDICATION_FOCUS_ROW);

??? // 设置单元格字体

??? privatefinal TextCellRenderer m_textRenderer = new TextCellRenderer(TextCellRenderer.INDICATION_FOCUS_ROW);

??? // 定义一个容器

??? private HashMap content = new HashMap();

??? // 构造方法

??? public WKTableModel ()

??? {

??????? initialize();

??????? m_textRenderer.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN));

??? }

?

??? // 显示数据

??? public Object doGetContentAt(int col, int row)

??? {

??????? String s = (String)content.get(col + "/" + row);

? ??????if (s != null)

??????????? return s;

??????? return col + "/" + row;

??? }

?

??? // 设置单元格字体样式

??? public KTableCellRenderer doGetCellRenderer(int col, int row)

??? {

??????? if (isFixedCell(col, row))

??????????? returnm_fixedRenderer;

?

??????? returnm_textRenderer;

??? }

?

??? // 表格行数

??? publicint doGetRowCount()

??? {

??????? return 100000;

??? }

?

??? // 标题行数

??? publicint getFixedHeaderRowCount()

??? {

??????? return 1;

??? }

?

??? // 表格列数

??? publicint doGetColumnCount()

??? {

??????? return 10000;

??? }

?

??? // 标题列数

??? publicint getFixedHeaderColumnCount()

??? {

??????? return 1;

??? }

?

??? // 列宽

??? publicint getInitialColumnWidth(int column)

??? {

??????? return 90;

??? }

?

??? // 行高

??? publicint getInitialRowHeight(int row)

??? {

?????? ?if (row == 0)

??????????? return 22;

??????? return 18;

??? }

}

运行结果:

?

如果您需要把修改的数据记录下来,那么需要用到公共方法:doSetContentAt(int column, int row, Object value)。

??? // 记录修改数据

??? publicvoid doSetContentAt(int col, int row, Object value)

??? {

??????? content.put(col + "/" + row, value);

}

3.设计表格风格

这节将教大家几种KTable方便的设置表格风格的方法,装饰一下自己的表格。

1).单元格样式—下拉框可编辑

public KTableCellEditor doGetCellEditor(int column, int row)

??? {

??????? if (column < getFixedColumnCount() || row < getFixedRowCount())

??????????? returnnull;

??? ????if (column % 3 == 1)

??????? {

??????????? KTableCellEditorCombo combo = new KTableCellEditorCombo();

??????????? combo.setItems(new String[]{"First", "Second", "third"});

??????????? return combo;

??????? }

??????? elseif (column % 3 == 2)

??????? {

??????????? KTableCellEditorComboText comboText = new KTableCellEditorComboText();

??????????? comboText.setItems(new String[]{"选择一", "选择二", "选择三"});

??????????? return comboText;

??????? }

??????? else

??????? {

??????????? returnnew KTableCellEditorText();

??????? }

??? }

控件:

KtableCellEditorCombo:只允许选择,不能输入。

KTableCellEditorComboText:允许选择和重新输入。

KTableCellEditorText:相当于文本框。

除了上面的三种,KTable还提供几种单元格控件:

KTableCellEditorCheckbox:选择框。如:

KTableCellEditorMultilineText:多行输入文本框。

2).改变行列大小

如果您需要改变单元格大小,在Model中加上下面2个公共方法即可:

publicboolean isColumnResizable(int col)

??? {

??????? returntrue;

??? }

?

??? publicboolean isRowResizable(int row)

??? {

??????? returntrue;

??? }

3).合并单元格

在Model中加上下面代码,具体格式可自己定义,我是两两合并:

public Point doBelongsToCell(int col, int row)

??? {

??????? if (isFixedCell(col, row))

??????????? returnnew Point(col, row);

?

??????? col -= getFixedHeaderColumnCount() + getFixedSelectableColumnCount();

??????? row -= getFixedHeaderRowCount() + getFixedSelectableRowCount();

?

??????? if ((col == 1 && row == 1) && (col % 2 == 0 && row % 2 == 0))

??????????? returnnew Point(col, row);

?

??????? // find supercell to merge with:

??????? int newCol = col;

??????? int newRow = row;

??????? if (col % 2 != 0)

??????????? newCol--;

??????? if (row % 2 != 0)

?????? ?????newRow--;

?

??????? returnnew Point(newCol + getFixedHeaderColumnCount() + getFixedSelectableColumnCount(), newRow

??????????????? + getFixedHeaderRowCount() + getFixedSelectableRowCount());

??? }

4).显示tooltip

public String doGetTooltipAt(int column, int row)

{

??????? return "Test-Tooltip";

??? }

5).添加图片

添加图片其实很简单只要在公共方法doGetContentAt ()中把图片对象返回就行了。其他的不用管了。因为doGetContentAt ()的返回类型是Object,所以可以返回任何对象。不过要记得把单元格大小调整好。

4.给表格添加排序功能

像windows的文件夹的排序功能一样,KTable的排序功能也是:单击标题自动切换上、下排序。

我们需要给表格添加KTableCellSelectionListener监听器。并且KTable的Model需要继承KTableSortedModel。

table.addCellSelectionListener(new KTableSortOnClick(table,

??????? new SortComparatorExample(model,

??????? -1, KTableSortComparator.SORT_NONE)));

简单介绍一下排序器的构造方法的三个参数,SortComparatorExample(KTableSortedModel model, int columnIndex,int direction)。

model:当前比表格使用的模型,用于对数据进行操作。

columnIndex:排序的列号。

Direction:升降排序标志,有三种:SORT_UP,SORT_DOWN,SORT_NONE。

?

热点排行