⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tablecursor.java

📁 源码为Eclipse开源开发平台桌面开发工具SWT的源代码,
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************* * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html *  * Contributors: *     IBM Corporation - initial API and implementation *******************************************************************************/package org.eclipse.swt.custom;import org.eclipse.swt.*;import org.eclipse.swt.graphics.*;import org.eclipse.swt.widgets.*;import org.eclipse.swt.events.*;/** * A TableCursor provides a way for the user to navigate around a Table * using the keyboard.  It also provides a mechanism for selecting an * individual cell in a table. *  * <p> Here is an example of using a TableCursor to navigate to a cell and then edit it. *  * <code><pre> *  public static void main(String[] args) { *		Display display = new Display(); *		Shell shell = new Shell(display); *		shell.setLayout(new GridLayout()); *	 *		// create a a table with 3 columns and fill with data *		final Table table = new Table(shell, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION); *		table.setLayoutData(new GridData(GridData.FILL_BOTH)); *		TableColumn column1 = new TableColumn(table, SWT.NONE); *		TableColumn column2 = new TableColumn(table, SWT.NONE); *		TableColumn column3 = new TableColumn(table, SWT.NONE); *		for (int i = 0; i &lt; 100; i++) { *			TableItem item = new TableItem(table, SWT.NONE); *			item.setText(new String[] { "cell "+i+" 0", "cell "+i+" 1", "cell "+i+" 2"}); *		} *		column1.pack(); *		column2.pack(); *		column3.pack(); *	 *		// create a TableCursor to navigate around the table *		final TableCursor cursor = new TableCursor(table, SWT.NONE); *		// create an editor to edit the cell when the user hits "ENTER"  *		// while over a cell in the table *		final ControlEditor editor = new ControlEditor(cursor); *		editor.grabHorizontal = true; *		editor.grabVertical = true; *	 *		cursor.addSelectionListener(new SelectionAdapter() { *			// when the TableEditor is over a cell, select the corresponding row in  *			// the table *			public void widgetSelected(SelectionEvent e) { *				table.setSelection(new TableItem[] {cursor.getRow()}); *			} *			// when the user hits "ENTER" in the TableCursor, pop up a text editor so that  *			// they can change the text of the cell *			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) { *						// close the text editor and copy the data over  *						// when the user hits "ENTER" *						if (e.character == SWT.CR) { *							TableItem row = cursor.getRow(); *							int column = cursor.getColumn(); *							row.setText(column, text.getText()); *							text.dispose(); *						} *						// close the text editor when the user hits "ESC" *						if (e.character == SWT.ESC) { *							text.dispose(); *						} *					} *				}); *				editor.setEditor(text); *				text.setFocus(); *			} *		}); *		// Hide the TableCursor when the user hits the "MOD1" or "MOD2" key. *		// This alows the user to select multiple items in the table. *		cursor.addKeyListener(new KeyAdapter() { *			public void keyPressed(KeyEvent e) { *				if (e.keyCode == SWT.MOD1 ||  *				    e.keyCode == SWT.MOD2 ||  *				    (e.stateMask & SWT.MOD1) != 0 ||  *				    (e.stateMask & SWT.MOD2) != 0) { *					cursor.setVisible(false); *				} *			} *		}); *		// Show the TableCursor when the user releases the "MOD2" or "MOD1" key. *		// This signals the end of the multiple selection task. *		table.addKeyListener(new KeyAdapter() { *			public void keyReleased(KeyEvent e) { *				if (e.keyCode == SWT.MOD1 && (e.stateMask & SWT.MOD2) != 0) return; *				if (e.keyCode == SWT.MOD2 && (e.stateMask & SWT.MOD1) != 0) return; *				if (e.keyCode != SWT.MOD1 && (e.stateMask & SWT.MOD1) != 0) return; *				if (e.keyCode != SWT.MOD2 && (e.stateMask & SWT.MOD2) != 0) return; *			 *				TableItem[] selection = table.getSelection(); *				TableItem row = (selection.length == 0) ? table.getItem(table.getTopIndex()) : selection[0]; *				table.showItem(row); *				cursor.setSelection(row, 0); *				cursor.setVisible(true); *				cursor.setFocus(); *			} *		}); *	 *		shell.open(); *		while (!shell.isDisposed()) { *			if (!display.readAndDispatch()) *				display.sleep(); *		} *		display.dispose(); *	} * </pre></code> *  * <dl> * <dt><b>Styles:</b></dt> * <dd>BORDER</dd> * <dt><b>Events:</b></dt> * <dd>Selection, DefaultSelection</dd> * </dl> *  * @since 2.0 *  */public class TableCursor extends Canvas {	Table table;	TableItem row = null;	TableColumn column = null;	Listener tableListener, resizeListener, disposeItemListener, disposeColumnListener;		// By default, invert the list selection colors	static final int BACKGROUND = SWT.COLOR_LIST_SELECTION_TEXT;	static final int FOREGROUND = SWT.COLOR_LIST_SELECTION;/** * Constructs a new instance of this class given its parent * table and a style value describing its behavior and appearance. * <p> * The style value is either one of the style constants defined in * class <code>SWT</code> which is applicable to instances of this * class, or must be built by <em>bitwise OR</em>'ing together  * (that is, using the <code>int</code> "|" operator) two or more * of those <code>SWT</code> style constants. The class description * lists the style constants that are applicable to the class. * Style bits are also inherited from superclasses. * </p> * * @param parent a Table control which will be the parent of the new instance (cannot be null) * @param style the style of control to construct * * @exception IllegalArgumentException <ul> *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li> * </ul> * @exception SWTException <ul> *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li> * </ul> * * @see SWT#BORDER * @see Widget#checkSubclass() * @see Widget#getStyle() */public TableCursor(Table parent, int style) {	super(parent, style);	table = parent;	setBackground(null);	setForeground(null);		Listener listener = new Listener() {		public void handleEvent(Event event) {			switch (event.type) {				case SWT.Dispose :					dispose(event);					break;				case SWT.FocusIn :				case SWT.FocusOut :					redraw();					break;				case SWT.KeyDown :					keyDown(event);					break;				case SWT.Paint :					paint(event);					break;				case SWT.Traverse :					traverse(event);					break;			}		}	};	int[] events = new int[] {SWT.Dispose, SWT.FocusIn, SWT.FocusOut, SWT.KeyDown, SWT.Paint, SWT.Traverse};	for (int i = 0; i < events.length; i++) {		addListener(events[i], listener);	}	tableListener = new Listener() {		public void handleEvent(Event event) {			switch (event.type) {				case SWT.MouseDown :					tableMouseDown(event);					break;				case SWT.FocusIn :					tableFocusIn(event);					break;			}		}	};	table.addListener(SWT.FocusIn, tableListener);	table.addListener(SWT.MouseDown, tableListener);	disposeItemListener = new Listener() {		public void handleEvent(Event event) {			row = null;			column = null;			resize();		}	};	disposeColumnListener = new Listener() {		public void handleEvent(Event event) {			row = null;			column = null;			resize();		}	};	resizeListener = new Listener() {		public void handleEvent(Event event) {			resize();		}	};	ScrollBar hBar = table.getHorizontalBar();	if (hBar != null) {		hBar.addListener(SWT.Selection, resizeListener);	}	ScrollBar vBar = table.getVerticalBar();	if (vBar != null) {		vBar.addListener(SWT.Selection, resizeListener);	}}/** * Adds the listener to the collection of listeners who will * be notified when the receiver's selection changes, by sending * it one of the messages defined in the <code>SelectionListener</code> * interface. * <p> * When <code>widgetSelected</code> is called, the item field of the event object is valid. * If the reciever has <code>SWT.CHECK</code> style set and the check selection changes, * the event object detail field contains the value <code>SWT.CHECK</code>. * <code>widgetDefaultSelected</code> is typically called when an item is double-clicked. * </p> * * @param listener the listener which should be notified * * @exception IllegalArgumentException <ul> *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException <ul> *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> * * @see SelectionListener * @see SelectionEvent * @see #removeSelectionListener(SelectionListener) *  */public void addSelectionListener(SelectionListener listener) {	checkWidget();	if (listener == null)		SWT.error(SWT.ERROR_NULL_ARGUMENT);	TypedListener typedListener = new TypedListener(listener);	addListener(SWT.Selection, typedListener);	addListener(SWT.DefaultSelection, typedListener);}void dispose(Event event) {	table.removeListener(SWT.FocusIn, tableListener);	table.removeListener(SWT.MouseDown, tableListener);	if (column != null) {		column.removeListener(SWT.Dispose, disposeColumnListener);		column.removeListener(SWT.Move, resizeListener);		column.removeListener(SWT.Resize, resizeListener);		column = null;	}	if (row != null) {		row.removeListener(SWT.Dispose, disposeItemListener);		row = null;	}	ScrollBar hBar = table.getHorizontalBar();	if (hBar != null) {		hBar.removeListener(SWT.Selection, resizeListener);	}	ScrollBar vBar = table.getVerticalBar();	if (vBar != null) {		vBar.removeListener(SWT.Selection, resizeListener);	}}void keyDown(Event event) {	if (row == null) return;	switch (event.character) {		case SWT.CR :			notifyListeners(SWT.DefaultSelection, new Event());			return;	}	int rowIndex = table.indexOf(row);	int columnIndex = column == null ? 0 : table.indexOf(column);	switch (event.keyCode) {		case SWT.ARROW_UP :			setRowColumn(Math.max(0, rowIndex - 1), columnIndex, true);			break;		case SWT.ARROW_DOWN :			setRowColumn(Math.min(rowIndex + 1, table.getItemCount() - 1), columnIndex, true);			break;        case SWT.ARROW_LEFT :        case SWT.ARROW_RIGHT :        	{	        		int columnCount = table.getColumnCount();        		if (columnCount == 0) break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -