如果您需要一种大容量(万行级别)的可编辑报表表格控件,那么KTable将是最佳选择。KTable 是一个用java开发的,对控制报表的项目,它最大的特点是使用独特的算法,能支持巨大的报表。
一、概述
KTable是一种表格式的SWT控件,作者Friederich Kupzog和Lorenz Maierhofer。主要功能:
1. 用户自定义界面风格
2. 可编辑数据
3. 可合并单元格,改变行高列宽
4. 提供颜色选择器
5. 添加图片等
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。
相关推荐
KTable 的使用非常简单,只需要创建一个 KTable 对象,并设置一个适配器对象,就可以显示数据。 KTable 的工作机制是通过适配器模式,将数据来源和表现形式连接起来。数据来源可以是 List、HashMap、XML 文件、...
以下是一个简单的 KTable 示例: ```java Properties props = new Properties(); props.put(StreamsConfig.APPLICATION_ID_CONFIG, "my-stream-processing-app"); props.put(StreamsConfig.BOOTSTRAP_SERVERS_...
4. **结果输出**:最后,我们可以通过`to()`或`through()`方法将处理后的KTable结果写入到一个或多个输出主题,或者可以使用`print()`方法在控制台上直接查看结果。 在Java实现中,KTable的生命周期管理是关键。`...
创建一个简单的KTABLE,包含三列,每列都有不同的数据类型: ```java Display display = new Display(); Shell shell = new Shell(display); KTable table = new KTable(shell, SWT.BORDER | SWT.FULL_...
从提供的压缩包文件名称来看,`ktable_2.1.3.jar`应该是KTable的库文件,包含了KTable组件的相关类和方法。`ktable_examples_2.1.3.jar`可能是示例代码包,包含了使用KTable的示例程序,帮助开发者了解如何在实际...
此外,查阅官方文档和社区论坛,可以获得更多的使用技巧和解决问题的方法。 总之,KTable for SWT是一个强大的工具,能够帮助开发者构建出功能丰富的表格应用。通过深入理解源代码和实践实例,我们可以充分利用它的...
通过以上代码可以看到,KTable的API设计简洁明了,易于理解和使用。无论是添加新列还是插入数据都非常直观。 ### 总结 KTable作为SWT Table的一个增强版本,在保持原有功能的基础上增加了许多实用的新特性。它不仅...
在"rcp-trainning"(RCP训练)阶段,学习和掌握KTABLE的使用至关重要。RCP是一种基于Java的框架,用于构建桌面应用程序,而KTABLE的集成能显著提升RCP应用的界面质量。通过实践和训练,开发者能够熟练运用KTABLE的...
ktable的api,是de.kupzog.ktable_2.2.0.jar。嘿嘿,英文的哦。
很好的 SWT Tale (比SWT自带的好多) 如果用 eclipse 或者 myeclipse 放入 dropins 文件夹中就可以当插件使用. 自带源代码,实例 [Text Table][Boolean Table][Span Table][Sortable Table][FixeWidth Table]
Apache Kafka流(KStream和KTable)。 docker-compose up -d(或docker-compose up -d-broker:如果不需要架构注册表) 确认与kafka代理的连接:nc -vz localhost 29092 检查Kafka代理的属性和./configuration/...
Apache Kafka 是一个分布式流处理平台,它被设计用于构建实时数据管道和流应用程序。Kafka Streams 是 Apache Kafka 提供的一个轻...在实际应用中,深入理解 Kafka Streams 的核心概念以及 Python 库的使用方法是关键。
使用 Kafka 进行图形分析 Kafka Graphs 是一个客户端层,用于使用 Apache Kafka 对图形进行分布式处理。 安装 Kafka Graphs 的发布被部署到 Maven Central。 < dependency > < groupId >io.kgraph</ ...
可以定义一个包含`@KafkaProducer`注解的方法,该方法接收消息内容作为参数。例如,创建一个发送字符串消息的生产者: ```java import org.springframework.kafka.core.KafkaTemplate; import org.springframework....
- **KTable API详解**:这一章节深入探讨了KTable API的功能和使用方法,帮助读者掌握复杂的表操作。 - **处理器API详解**:这里详细介绍了Processor API的工作原理及其应用场景,适用于需要自定义处理逻辑的情况...
例如,你可以使用KTable和KStream的联接(Join)操作来合并两个数据流,或者使用filter方法过滤特定的数据。Kafka Stream还提供了状态存储(State Store),可以用来维护计算过程中的中间结果,提高效率。 Kafka ...
通过这个项目,开发者可以深入理解如何在实际场景中使用Kafka Streams API来处理实时数据,以及如何将分析模型集成到流处理管道中。这不仅有助于提升数据处理效率,还能帮助业务做出更快更准确的决策。
一、为什么使用Apache Kafka 在信息技术领域,有两个显著的趋势:首先,企业为决策收集的数据的多样性和速度不断增加。这些数据不仅包括交易记录,还包括业务指标、物联网数据、运维指标和应用程序日志等。其次,...