**
* 创建:ZhengXi 2009-8-4
*/
package com.infotech.updo.tools;
import java.text.Collator;
import java.util.Locale;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
/**
* SWT表格操作类
* @author 小黄
*
*/
public class TableManager implements ITableColorProvider{
/**
* 为表列添加排序功能
*
* @param table
* 表格
* @param column
* 表列
*/
public static void addSorter(final Table table, final TableColumn column) {
column.addListener(SWT.Selection, new Listener() {
boolean isAscend = true;
Collator comparator = Collator.getInstance(Locale.getDefault());
public void handleEvent(Event e) {
int columnIndex = getColumnIndex(table, column);
TableItem[] items = table.getItems();
for (int i = 1; i < items.length; i++) {
String value2 = items[i].getText(columnIndex);
for (int j = 0; j < i; j++) {
String value1 = items[j].getText(columnIndex);
boolean isLessThan = comparator.compare(value2,
value1) < 0;
if ((isAscend && isLessThan)
|| (!isAscend && !isLessThan)) {
String[] values = getTableItemText(table,
items[i]);
Image image = items[i].getImage();
Object obj = items[i].getData();
boolean chck = items[i].getChecked();
items[i].dispose();
TableItem item = new TableItem(table,
SWT.NONE, j);
item.setChecked(chck);
item.setImage(image);
item.setText(values);
item.setData(obj);
items = table.getItems();
break;
}
}
}
table.setSortColumn(column);
table.setSortDirection((isAscend ? SWT.UP : SWT.DOWN));
isAscend = !isAscend;
}
});
}
private static int getColumnIndex(Table table, TableColumn column) {
TableColumn[] columns = table.getColumns();
for (int i = 0; i < columns.length; i++) {
if (columns[i].equals(column))
return i;
}
return -1;
}
private static String[] getTableItemText(Table table, TableItem item) {
int count = table.getColumnCount();
String[] strs = new String[count];
for (int i = 0; i < count; i++) {
strs[i] = item.getText(i);
}
return strs;
}
/**
* 列适应表格宽度 第一列固定其他列计算公式:新列的宽度= ( 新表格宽度 - 就表格宽度 ) / 列数 +
旧列的宽度
*
* @param table
* 表格
*/
public static void aotuColWidth(final Table table) {
table.addControlListener(new ControlAdapter() {
public void controlResized(final ControlEvent e) {
int oldTableWidth = 0;
for (int i = 1; i < table.getColumnCount(); i++) {
oldTableWidth += table.getColumn(i).getWidth();
}
for (int i = 1; i < table.getColumnCount(); i++) {
int oldWidth = table.getColumn(i).getWidth();
table
.getColumn(i)
.setWidth(
(table.getSize().x
-
table.getColumn(0).getWidth() - oldTableWidth)
/
(table.getColumnCount() - 1)
+ oldWidth);
}
}
});
}
/**
* 添加光棒以及各行颜色差效果
*
* @param table
* table
*/
public static void rowLight(final Table table) {
table.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent e) {
TableItem item = table.getItem(new Point(e.x, e.y));
if (item != null) {
for (int i = 0; i < table.getItemCount(); i++) {
if (i % 2 == 0) {
table.getItem(i).setBackground(
Display.getCurrent
().getSystemColor(
SWT.COLOR_WHITE));
} else {
table.getItem(i).setBackground(
Display.getCurrent
().getSystemColor(
SWT.COLOR_WIDGET_LIGHT_SHADOW));
}
}
table.indexOf(item);
item.setBackground(Display.getCurrent().getSystemColor(
SWT.COLOR_YELLOW));
}
}
});
}
/**
* 背景颜色,隔行换色
*
* @param table
* table
*/
private Color[] bg = new Color[]
{new Color(null, 247, 247, 240), new Color(null, 255, 255, 255)};
private Object current = null;
private int currentColor = 0;
public Color getForeground(Object element, int columnIndex)
{
return null;
}
public Color getBackground(Object element, int columnIndex)
{
if (current != element)
{
currentColor = 1 - currentColor;
current = element;
}
return bg[currentColor];
}
}
分享到:
相关推荐
完美解决Cannot load 32-bit SWT libraries on 64-bit JVM问题
把原来的swt.jar替换成这个就能解决 Cannot load 32-bit SWT libraries on 64-bit JVM问题
%1 不是有效的 Win32 应用程序。no swt-win32 in java.library.path替换文件
swt框架 适用与window下java窗口开发~~~~
在这个场景中,我们关注的是两个特定的DLL文件:`jacob.dll` 和 `swt-win32-3139.dll`。 `jacob.dll` 是Java和COM(Component Object Model)之间桥梁的组件,全称为Java COM Bridge。Jacob库使得Java开发者能够...
为表列添加排序功能,列适应表格宽度,添加光棒以及各行颜色差效果,背景颜色,隔行换色
"swt-3.8M5-win32-win32-x86"是SWT的一个特定版本,针对Windows 32位操作系统设计。这个压缩包包含了SWT库的源码和相关资源,方便开发者进行定制和调试。 在给定的文件列表中,我们看到以下内容: 1. **.classpath...
jface/swt windows系统中所需动态链接库
SWT-win64-3.6.2.jar 是一个针对64位Windows操作系统的软件开发工具包,主要用于Java应用程序中的图形用户界面(GUI)开发。SWT,全称为Standard Widget Toolkit,是由Eclipse基金会开发的一个开源GUI库,它是Java...
标题中的"swt-4.3-win64.rar"和"swt-4.3-win32-x86.jar"是针对Windows平台的不同版本的SWT库,其中"win64"适用于64位系统,而"win32-x86"则是为32位系统设计的。 SWT库的核心在于提供了一组与操作系统紧密集成的...
javase 中的 swt开发使用jar包
"swt-3.7.2-gtk-linux-x86_64.zip" 是一个针对Linux 64位系统,基于GTK+(GIMP Toolkit)的SWT版本,版本号为3.7.2。这个压缩包包含了在Eclipse环境中使用SWT Designer所需的一些关键文件。 首先,`.classpath`文件...
swt-win32-3346.dll
SWT-Win32-Extension 是一个专门为Java的SWT(Standard Widget Toolkit)库扩展的模块,主要用于增强在Windows平台上SWT的功能。SWT是Eclipse项目中的一个关键部分,它提供了一种与操作系统直接交互的方式,使得Java...
swt运行时所需的dll文件,包括swt-awt-win32-3236.dll swt-gdip-win32-3236.dll swt-win32-3229.dll swt-win32-3236.dll
标题 "swt-4.19M1-cocoa-macosx-x86_64.zip" 暗示这是一个 SWT (Standard Widget Toolkit) 的版本,适用于 macOS 平台的 Cocoa 框架,并且是针对 x86_64 架构的。SWT 是一个开源的 Java 库,它允许 Java 开发人员...
总的来说,SWT-win32-3235是SWT针对32位Windows环境的一个版本,包含了构建高性能本地UI所需的所有组件和库文件,提供了丰富的图形功能以及与Java AWT的兼容性,是Java开发者在Windows平台上创建原生风格应用的理想...
swt-3.4M4-win32-win32-x86