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

SWT 隔行换色-自动阔高调整

2012-12-20 
SWT 隔行换色-自动宽高调整** * 创建:ZhengXi 2009-8-4 */ package com.infotech.updo.tools import java

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]; } }
?

热点排行