**
* 创建: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];
}
}
分享到:
相关推荐
把原来的swt.jar替换成这个就能解决 Cannot load 32-bit SWT libraries on 64-bit JVM问题
为表列添加排序功能,列适应表格宽度,添加光棒以及各行颜色差效果,背景颜色,隔行换色
Dll文件jacob.dll & swt-win32-3139.dll
swt框架 适用与window下java窗口开发~~~~
swt-win32-3346.dll
swt3.8 源码 SWT的JAR包 swt-3.8M5-win32-win32-x86
完美解决Cannot load 32-bit SWT libraries on 64-bit JVM问题
swt-3.4M4-win32-win32-x86
javase 中的 swt开发使用jar包
SWT RCP 界面--如何编写一个漂亮的 SWT RCP 界面
有了这个做SWT开发就没有问题了,swt-win32-3063.dll
做SWT的时候碰到的错误“Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3232 in java.library.path 还有ava.lang.UnsatisfiedLinkError: no swt-win32-3139 in java.library.path, ...
swt-win64-3.6.2.jar
swt-designer for eclipse3.7.2
制作java swing 的内嵌web需要用到的swt.jar
最新mac swt
swt-deginer - plugins-3(共5 部分)swt-deginer - plugins-3(共5 部分)swt-deginer - plugins-3(共5 部分)swt-deginer - plugins-3(共5 部分)
swt-win32-3235为一个网友上传的,3235版本
%1 不是有效的 Win32 应用程序。no swt-win32 in java.library.path替换文件