SWT 隔行换色-自动宽高调整
** * 创建: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]; } }?