JAVA.SWT/JFace: SWT高级控件之表格(Table、TableItem和TableColumn)
2011-09-07 00:03:29
- package com.wjc.tree;
-
- import java.util.Hashtable;
-
- import org.eclipse.swt.SWT;
- import org.eclipse.swt.custom.CCombo;
- import org.eclipse.swt.custom.ControlEditor;
- import org.eclipse.swt.custom.TableCursor;
- import org.eclipse.swt.custom.TableEditor;
- import org.eclipse.swt.custom.ViewForm;
- import org.eclipse.swt.events.FocusAdapter;
- import org.eclipse.swt.events.FocusEvent;
- import org.eclipse.swt.events.KeyAdapter;
- import org.eclipse.swt.events.KeyEvent;
- import org.eclipse.swt.events.ModifyEvent;
- import org.eclipse.swt.events.ModifyListener;
- import org.eclipse.swt.events.MouseEvent;
- import org.eclipse.swt.events.MouseListener;
- import org.eclipse.swt.events.SelectionAdapter;
- import org.eclipse.swt.events.SelectionEvent;
- import org.eclipse.swt.layout.FillLayout;
- import org.eclipse.swt.layout.GridData;
- import org.eclipse.swt.layout.GridLayout;
- import org.eclipse.swt.widgets.Composite;
- import org.eclipse.swt.widgets.Display;
- import org.eclipse.swt.widgets.Event;
- import org.eclipse.swt.widgets.Listener;
- import org.eclipse.swt.widgets.Menu;
- import org.eclipse.swt.widgets.MenuItem;
- import org.eclipse.swt.widgets.Shell;
- import org.eclipse.swt.widgets.Table;
- import org.eclipse.swt.widgets.TableColumn;
- import org.eclipse.swt.widgets.TableItem;
- import org.eclipse.swt.widgets.Text;
- import org.eclipse.swt.widgets.ToolBar;
- import org.eclipse.swt.widgets.ToolItem;
-
- public class TableSample {
- public class TableItemControls{
-
- Text text;
- CCombo combo;
- TableEditor tableeditor;
- TableEditor tableeditor1;
-
- public TableItemControls(Text text, CCombo combo, TableEditor tableeditor, TableEditor tableeditor1) {
-
- this.text = text;
- this.combo = combo;
- this.tableeditor = tableeditor;
- this.tableeditor1 = tableeditor1;
- }
- public void dispose()
- {
- text.dispose();
- combo.dispose();
- tableeditor.dispose();
- tableeditor1.dispose();
- }
- };
- private Shell sShell = null;
- private ViewForm viewForm = null;
- private ToolBar toolBar = null;
- private Composite composite = null;
- private Table table = null;
- private Menu menu = null;
- private Hashtable<TableItem, TableItemControls> tablecontrols = new Hashtable<TableItem, TableItemControls>();
-
-
- private void createViewForm() {
- viewForm = new ViewForm(sShell, SWT.NONE);
- viewForm.setTopCenterSeparate(true);
- createToolBar();
- viewForm.setTopLeft(toolBar);
- createComposite();
- viewForm.setContent(composite);
- }
-
-
- private void createToolBar() {
- toolBar = new ToolBar(viewForm, SWT.FLAT);
- final ToolItem add = new ToolItem(toolBar, SWT.PUSH);
- add.setText("添加");
-
- final ToolItem del = new ToolItem(toolBar, SWT.PUSH);
- del.setText("删除");
-
- final ToolItem back = new ToolItem(toolBar, SWT.PUSH);
- back.setText("上移");
-
- final ToolItem forward = new ToolItem(toolBar, SWT.PUSH);
- forward.setText("下移");
-
- final ToolItem save = new ToolItem(toolBar, SWT.PUSH);
- save.setText("保存");
-
-
- Listener listener = new Listener(){
- public void handleEvent(Event event) {
-
-
- if ( event.widget == add )
- {
- TableItem item = new TableItem(table, SWT.NONE);
- item.setText(new String[] {"郑六", "女","568","zhengliu@sina.com"});
- }
-
- else if ( event.widget == del)
- {
-
- TableItem[] items = table.getItems();
-
- for ( int i=items.length-1;i>=0;i-- ){
-
- if ( !items[i].getChecked())
- continue;
-
- int index = table.indexOf( items[i]);
-
- if (index<0)
- continue;
-
- TableItemControls cons = tablecontrols.get(items[index]);
- if (cons != null) {
- cons.dispose();
- tablecontrols.remove(items[index]);
- System.out.println("dispose " + index);
- }
-
-
- table.remove( index );
- System.out.println("i="+i+", index="+index);
- System.out.println("行数:" + table.getItemCount());
-
- }
- }
-
- else if ( event.widget == back)
- {
- int selectedRow = table.getSelectionIndex();
- if ( selectedRow > 0 )
- table.setSelection( selectedRow-1 );
- }
-
- else if ( event.widget == forward)
- {
- int selectedRow = table.getSelectionIndex();
- if ( selectedRow > -1&& selectedRow<table.getItemCount()-1)
- table.setSelection( selectedRow+1 );
- }
-
- else if ( event.widget == save)
- {
- TableItem [] items = table.getItems();
-
- for ( int i=0;i<items.length;i++)
- for (int j=0;j<table.getColumnCount();j++)
- System.out.println(items[i].getText(j));
- }
- }
-
- };
-
- add.addListener( SWT.Selection , listener );
- del.addListener( SWT.Selection, listener );
- back.addListener( SWT.Selection , listener );
- forward.addListener( SWT.Selection, listener );
- save.addListener( SWT.Selection, listener );
- }
-
- private void createComposite() {
- GridLayout gridLayout = new GridLayout();
- gridLayout.numColumns = 1;
- composite = new Composite(viewForm, SWT.NONE);
- composite.setLayout(gridLayout);
- createTable();
- }
-
- private void createTable() {
-
- GridData gridData = new org.eclipse.swt.layout.GridData();
- gridData.horizontalAlignment = SWT.FILL;
- gridData.grabExcessHorizontalSpace = true;
- gridData.grabExcessVerticalSpace = true;
- gridData.verticalAlignment = SWT.FILL;
-
-
- table = new Table(composite, SWT.MULTI|SWT.FULL_SELECTION|SWT.CHECK);
- table.setHeaderVisible(true);
- table.setLayoutData(gridData);
- table.setLinesVisible(true);
-
- String[] tableHeader = {"姓名","性别","电话","电子邮件"};
- for (int i=0;i<tableHeader.length;i++){
- TableColumn tableColumn = new TableColumn(table, SWT.NONE);
- tableColumn.setText( tableHeader[i]);
-
- tableColumn.setMoveable(true);
- }
-
- TableItem item = new TableItem(table, SWT.NONE);
- item.setText(new String[] {"张三", "男","123","zhangsan@sina.com"});
-
-
-
- for (int i = 0; i < 5; i++) {
- item = new TableItem(table, SWT.NONE);
- item.setText(new String[] {"李四", "男","4582","lisi@sina.com"});
- }
-
-
-
- item = new TableItem(table, SWT.NONE);
- item.setText(new String[] {"周五", "女","567","zhouwu@sina.com"});
-
-
-
-
-
- TableItem [] items = table.getItems ();
- for (int i=0; i<items.length; i++) {
-
- final TableEditor editor = new TableEditor (table);
-
- final Text text = new Text (table, SWT.NONE);
-
- text.setText(items[i].getText(0));
-
- editor.grabHorizontal = true;
-
- editor.setEditor(text, items[i], 0);
-
-
- text.addModifyListener( new ModifyListener(){
- public void modifyText(ModifyEvent e) {
- editor.getItem().setText(1,text.getText());
- }
-
- });
-
- final TableEditor editor1 = new TableEditor (table);
- final CCombo combo = new CCombo (table, SWT.NONE);
- combo.add("男");
- combo.add("女");
- combo.setText(items[i].getText(1));
- editor1.grabHorizontal = true;
- editor1.setEditor(combo, items[i], 1);
- combo.addModifyListener( new ModifyListener(){
- public void modifyText(ModifyEvent e) {
- editor1.getItem().setText(1,combo.getText());
- }
-
- });
-
-
- TableItemControls cons = new TableItemControls(text, combo, editor, editor1);
- tablecontrols.put(items[i], cons);
-
- }
-
-
-
- final TableCursor cursor = new TableCursor(table, SWT.NONE);
-
- final ControlEditor editor = new ControlEditor(cursor);
- editor.grabHorizontal = true;
- editor.grabVertical = true;
-
- cursor.addSelectionListener( new SelectionAdapter() {
-
- public void widgetDefaultSelected(SelectionEvent e) {
-
- final Text text = new Text(cursor, SWT.NONE);
-
- TableItem row = cursor.getRow();
-
- int column = cursor.getColumn();
-
- text.setText(row.getText(column));
-
- text.addKeyListener(new KeyAdapter() {
- public void keyPressed(KeyEvent e) {
-
-
- if (e.character == SWT.CR) {
- TableItem row = cursor.getRow();
- int column = cursor.getColumn();
- row.setText(column, text.getText());
- text.dispose();
- }
-
- if (e.character == SWT.ESC) {
- text.dispose();
- }
- }
- });
-
- text.addFocusListener(new FocusAdapter() {
-
- public void focusLost(FocusEvent e) {
- text.dispose();
- }
- });
-
- editor.setEditor(text);
-
- text.setFocus();
- }
-
- public void widgetSelected(SelectionEvent e) {
- table.setSelection(new TableItem[] { cursor.getRow()});
- }
- });
- cursor.addMouseListener(new MouseListener() {
-
- @Override
- public void mouseDoubleClick(MouseEvent e) {
-
-
- }
-
- @Override
- public void mouseDown(MouseEvent e) {
- if (e.button==3) {
- menu.setVisible(true);
- }
- }
-
- @Override
- public void mouseUp(MouseEvent e) {
-
-
- }
-
- });
-
-
- for (int i=0; i<tableHeader.length; i++) {
- table.getColumn (i).pack ();
- }
-
-
- table.addSelectionListener( new SelectionAdapter(){
- public void widgetSelected(SelectionEvent e) {
-
- int total = table.getItemCount();
-
- for ( int i=0;i<total;i++){
- TableItem item = table.getItem(i);
-
- if (table.isSelected( i )){
- item.setBackground( sShell.getDisplay().getSystemColor( SWT.COLOR_RED));
- item.setForeground( sShell.getDisplay().getSystemColor( SWT.COLOR_WHITE));
- }else {
- item.setBackground( null );
- item.setForeground( null );
- }
- }
- }
-
- });
-
- }
-
- public static void main(String[] args) {
-
- Display display = Display.getDefault();
- TableSample thisClass = new TableSample();
- thisClass.createSShell();
- thisClass.sShell.open();
- while (!thisClass.sShell.isDisposed()) {
- if (!display.readAndDispatch())
- display.sleep();
- }
-
- display.dispose();
- }
-
-
- private void createSShell() {
- sShell = new Shell();
- sShell.setText("表格窗口");
- sShell.setLayout(new FillLayout());
- createViewForm();
- createMenu();
-
- sShell.setSize(new org.eclipse.swt.graphics.Point(307,218));
- sShell.pack();
- }
-
- private void createMenu() {
-
- menu = new Menu (sShell, SWT.POP_UP);
-
- table.setMenu (menu);
-
- MenuItem del = new MenuItem (menu, SWT.PUSH);
- del.setText ("删除");
-
-
- del.addListener (SWT.Selection, new Listener () {
- public void handleEvent (Event event) {
-
- table.remove (table.getSelectionIndices ());
- }
- });
-
- MenuItem view = new MenuItem (menu, SWT.PUSH);
- view.setText ("查看");
-
-
- view.addListener (SWT.Selection, new Listener () {
- public void handleEvent (Event event) {
- TableItem[] items = table.getSelection();
- for (int i=0;i<items.length;i++)
- System.out.print(items[i].getText());
- }
- });
-
- table.setMenu(menu);
- }
-
- }
|