TableView单元格的颜色对话框

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ColorCellEditor;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

public class MainClass extends ApplicationWindow {

 public static final String NAME = "Name";

 public static final String MALE = "Male?";

 public static final String AGE = "Age Range";

 public static final String SHIRT_COLOR = "Shirt Color";

 public static final String[] PROPS = { NAME, MALE, AGE, SHIRT_COLOR };

 private final java.util.List studentList = new ArrayList();

 public MainClass() {
  super(null);
  setBlockOnOpen(true);
  open();
  Display.getCurrent().dispose();
 }

 @Override
 protected void configureShell(final Shell shell) {
  super.configureShell(shell);
  shell.setText("Person Editor");
  shell.setSize(400, 400);
 }

 @Override
 protected Control createContents(final Composite parent) {
  final Composite composite = new Composite(parent, SWT.NONE);
  composite.setLayout(new GridLayout(1, false));
  final Button newPerson = new Button(composite, SWT.PUSH);
  newPerson.setText("Create New Person");

  final TableViewer tv = new TableViewer(composite, SWT.FULL_SELECTION);
  tv.setContentProvider(new PersonContentProvider());
  tv.setLabelProvider(new StudentLabelProvider());
  tv.setInput(studentList);
  final Table table = tv.getTable();
  table.setLayoutData(new GridData(GridData.FILL_BOTH));

  new TableColumn(table, SWT.CENTER).setText(NAME);
  new TableColumn(table, SWT.CENTER).setText(MALE);
  new TableColumn(table, SWT.CENTER).setText(AGE);
  new TableColumn(table, SWT.CENTER).setText(SHIRT_COLOR);

  for (int i = 0, n = table.getColumnCount(); i < n; i++) {
   table.getColumn(i).pack();
  }

  table.setHeaderVisible(true);
  table.setLinesVisible(true);

  newPerson.addSelectionListener(new SelectionAdapter() {

   @Override
   public void widgetSelected(final SelectionEvent event) {
    final Student p = new Student();
    p.setName("Name");
    p.setMale(true);
    p.setAgeRange(Integer.valueOf("0"));
    p.setShirtColor(new RGB(255, 0, 0));
    studentList.add(p);
    tv.refresh();
   }
  });

  final CellEditor[] editors = new CellEditor[4];
  editors[0] = new TextCellEditor(table);
  editors[1] = new CheckboxCellEditor(table);
  editors[2] = new ComboBoxCellEditor(table, AgeRange.INSTANCES, SWT.READ_ONLY);
  editors[3] = new ColorCellEditor(table);

  tv.setColumnProperties(PROPS);
  tv.setCellModifier(new StudentCellModifier(tv));
  tv.setCellEditors(editors);

  return composite;
 }

 public static void main(final String[] args) {
  new MainClass();
 }
}

class StudentCellModifier implements ICellModifier {

 private final Viewer viewer;

 public StudentCellModifier(final Viewer viewer) {
  this.viewer = viewer;
 }

 @Override
 public boolean canModify(final Object element, final String property) {
  return true;
 }

 @Override
 public Object getValue(final Object element, final String property) {
  final Student p = (Student) element;
  if (MainClass.NAME.equals(property)) {
   return p.getName();
  } else if (MainClass.MALE.equals(property)) {
   return Boolean.valueOf(p.isMale());
  } else if (MainClass.AGE.equals(property)) {
   return p.getAgeRange();
  } else if (MainClass.SHIRT_COLOR.equals(property)) {
   return p.getShirtColor();
  } else {
   return null;
  }
 }

 @Override
 public void modify(Object element, final String property, final Object value) {
  if (element instanceof Item) {
   element = ((Item) element).getData();
  }

  final Student p = (Student) element;
  if (MainClass.NAME.equals(property)) {
   p.setName((String) value);
  } else if (MainClass.MALE.equals(property)) {
   p.setMale(((Boolean) value).booleanValue());
  } else if (MainClass.AGE.equals(property)) {
   p.setAgeRange((Integer) value);
  } else if (MainClass.SHIRT_COLOR.equals(property)) {
   p.setShirtColor((RGB) value);
  }

  viewer.refresh();
 }
}

class PersonContentProvider implements IStructuredContentProvider {

 @Override
 public Object[] getElements(final Object inputElement) {
  return ((List) inputElement).toArray();
 }

 @Override
 public void dispose() {
 }

 @Override
 public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
 }
}

class Student {

 private String name;

 private boolean male;

 private Integer ageRange;

 private RGB shirtColor;

 public Integer getAgeRange() {
  return ageRange;
 }

 public void setAgeRange(final Integer ageRange) {
  this.ageRange = ageRange;
 }

 public boolean isMale() {
  return male;
 }

 public void setMale(final boolean male) {
  this.male = male;
 }

 public String getName() {
  return name;
 }

 public void setName(final String name) {
  this.name = name;
 }

 public RGB getShirtColor() {
  return shirtColor;
 }

 public void setShirtColor(final RGB shirtColor) {
  this.shirtColor = shirtColor;
 }
}

class StudentLabelProvider implements ITableLabelProvider {

 @Override
 public Image getColumnImage(final Object element, final int columnIndex) {
  return null;
 }

 @Override
 public String getColumnText(final Object element, final int columnIndex) {
  final Student person = (Student) element;
  switch (columnIndex) {
  case 0:
   return person.getName();
  case 1:
   return Boolean.toString(person.isMale());
  case 2:
   return AgeRange.INSTANCES[person.getAgeRange().intValue()];
  case 3:
   return person.getShirtColor().toString();
  }
  return null;
 }

 @Override
 public void addListener(final ILabelProviderListener listener) {
 }

 @Override
 public void dispose() {
 }

 @Override
 public boolean isLabelProperty(final Object element, final String property) {
  return false;
 }

 @Override
 public void removeListener(final ILabelProviderListener listener) {
 }
}

class AgeRange {

 public static final String NONE = "";

 public static final String BABY = "0 - 3";

 public static final String TODDLER = "4 - 7";

 public static final String CHILD = "8 - 12";

 public static final String TEENAGER = "13 - 19";

 public static final String ADULT = "20 - ?";

 public static final String[] INSTANCES = { NONE, BABY, TODDLER, CHILD, TEENAGER, ADULT };
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值