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

📄 hoverhelp.java

📁 SWT开发例子
💻 JAVA
字号:
/******************************************************************************* * Copyright (c) 2000, 2003 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.examples.hoverhelp;import java.io.*;import java.text.*;import java.util.*;import org.eclipse.swt.*;import org.eclipse.swt.events.*;import org.eclipse.swt.graphics.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;/** * This example demonstrates how to implement hover help feedback * using the MouseTrackListener. */public class HoverHelp {	private static ResourceBundle resourceBundle = ResourceBundle.getBundle("examples_hoverhelp");;		static final int		hhiInformation = 0,		hhiWarning = 1;	static final String[] imageLocations = {		"information.gif",		"warning.gif"	};	Image images[];	/**	 * Runs main program.	 */	public static void main (String [] args) {		Display display = new Display();		Shell shell = new HoverHelp().open(display);		// Event loop		while (shell != null && ! shell.isDisposed()) {			if (! display.readAndDispatch()) display.sleep();		}		// Cleanup		display.dispose();	}		/**	 * Opens the main program.	 */	public Shell open(Display display) {				// Load the images		Class clazz = HoverHelp.class;		try {			if (images == null) {				images = new Image[imageLocations.length];								for (int i = 0; i < imageLocations.length; ++i) {					InputStream stream = clazz.getResourceAsStream(imageLocations[i]);					ImageData source = new ImageData(stream);					ImageData mask = source.getTransparencyMask();					images[i] = new Image(display, source, mask);				}			}			} catch (Exception ex) {			System.err.println(getResourceString("error.CouldNotLoadResources",				new Object[] { ex.getMessage() }));			return null;		}		// Create the window		Shell shell = new Shell();		createPartControl(shell);		shell.addDisposeListener(new DisposeListener() {			public void widgetDisposed(DisposeEvent e) {				/* Free resources */				if (images != null) {					for (int i = 0; i < images.length; i++) {						final Image image = images[i];						if (image != null) image.dispose();					}					images = null;				}			}		});		shell.pack();		shell.open();		return shell;	}	/**	 * Gets a string from the resource bundle.	 * We don't want to crash because of a missing String.	 * Returns the key if not found.	 */	public String getResourceString(String key) {		try {			return resourceBundle.getString(key);		} catch (MissingResourceException e) {			return key;		} catch (NullPointerException e) {			return "!" + key + "!";		}				}	/**	 * Gets a string from the resource bundle and binds it	 * with the given arguments. If the key is not found,	 * return the key.	 */	public String getResourceString(String key, Object[] args) {		try {			return MessageFormat.format(getResourceString(key), args);		} catch (MissingResourceException e) {			return key;		} catch (NullPointerException e) {			return "!" + key + "!";		}	}	/**	 * Creates the example	 */	public void createPartControl(Composite frame) {		final ToolTipHandler tooltip = new ToolTipHandler(frame.getShell());				GridLayout layout = new GridLayout();		layout.numColumns = 3;		frame.setLayout(layout);			ToolBar bar = new ToolBar (frame, SWT.BORDER);		for (int i=0; i<5; i++) {			ToolItem item = new ToolItem (bar, SWT.PUSH);			item.setText (getResourceString("ToolItem.text", new Object[] { new Integer(i) }));			item.setData ("TIP_TEXT", getResourceString("ToolItem.tooltip",				new Object[] { item.getText() }));			item.setData ("TIP_HELPTEXTHANDLER", new ToolTipHelpTextHandler() {				public String getHelpText(Widget widget) {					Item item = (Item) widget;					return getResourceString("ToolItem.help", new Object[] { item.getText() });				}			});		}		GridData gridData = new GridData();		gridData.horizontalSpan = 3;		bar.setLayoutData(gridData);		tooltip.activateHoverHelp(bar);		Table table = new Table (frame, SWT.BORDER);		for (int i=0; i<4; i++) {			TableItem item = new TableItem (table, SWT.PUSH);			item.setText (getResourceString("Item", new Object[] { new Integer(i) }));			item.setData ("TIP_IMAGE", images[hhiInformation]);			item.setText (getResourceString("TableItem.text", new Object[] { new Integer(i) }));			item.setData ("TIP_TEXT", getResourceString("TableItem.tooltip",				new Object[] { item.getText() }));			item.setData ("TIP_HELPTEXTHANDLER", new ToolTipHelpTextHandler() {				public String getHelpText(Widget widget) {					Item item = (Item) widget;					return getResourceString("TableItem.help", new Object[] { item.getText() });				}			});		}		table.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL));		tooltip.activateHoverHelp(table);			Tree tree = new Tree (frame, SWT.BORDER);		for (int i=0; i<4; i++) {			TreeItem item = new TreeItem (tree, SWT.PUSH);			item.setText (getResourceString("Item", new Object[] { new Integer(i) }));			item.setData ("TIP_IMAGE", images[hhiWarning]);			item.setText (getResourceString("TreeItem.text", new Object[] { new Integer(i) }));			item.setData ("TIP_TEXT", getResourceString("TreeItem.tooltip",				new Object[] { item.getText() }));			item.setData ("TIP_HELPTEXTHANDLER", new ToolTipHelpTextHandler() {				public String getHelpText(Widget widget) {					Item item = (Item) widget;					return getResourceString("TreeItem.help", new Object[] { item.getText() });				}			});		}		tree.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL));		tooltip.activateHoverHelp(tree);			Button button = new Button (frame, SWT.PUSH);		button.setText (getResourceString("Hello.text"));		button.setData ("TIP_TEXT", getResourceString("Hello.tooltip"));		tooltip.activateHoverHelp(button);	}	/**	 * Emulated tooltip handler	 * Notice that we could display anything in a tooltip besides text and images.	 * For instance, it might make sense to embed large tables of data or buttons linking	 * data under inspection to material elsewhere, or perform dynamic lookup for creating	 * tooltip text on the fly.	 */	protected static class ToolTipHandler {		private Shell  parentShell;		private Shell  tipShell;		private Label  tipLabelImage, tipLabelText;		private Widget tipWidget; // widget this tooltip is hovering over		private Point  tipPosition; // the position being hovered over			/**		 * Creates a new tooltip handler		 *		 * @param parent the parent Shell		 */			public ToolTipHandler(Shell parent) {			final Display display = parent.getDisplay();			this.parentShell = parent;				tipShell = new Shell(parent, SWT.ON_TOP);			GridLayout gridLayout = new GridLayout();			gridLayout.numColumns = 2;			gridLayout.marginWidth = 2;			gridLayout.marginHeight = 2;			tipShell.setLayout(gridLayout);				tipShell.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));						tipLabelImage = new Label(tipShell, SWT.NONE);			tipLabelImage.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));			tipLabelImage.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));			tipLabelImage.setLayoutData(new GridData(GridData.FILL_HORIZONTAL |				GridData.VERTICAL_ALIGN_CENTER));				tipLabelText = new Label(tipShell, SWT.NONE);			tipLabelText.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));			tipLabelText.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));			tipLabelText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL |				GridData.VERTICAL_ALIGN_CENTER));		}			/**		 * Enables customized hover help for a specified control		 * 		 * @control the control on which to enable hoverhelp		 */		public void activateHoverHelp(final Control control) {			/*			 * Get out of the way if we attempt to activate the control underneath the tooltip			 */			control.addMouseListener(new MouseAdapter () {				public void mouseDown (MouseEvent e) {					if (tipShell.isVisible()) tipShell.setVisible(false);				}				});				/*			 * Trap hover events to pop-up tooltip			 */			control.addMouseTrackListener(new MouseTrackAdapter () {				public void mouseExit(MouseEvent e) {					if (tipShell.isVisible()) tipShell.setVisible(false);					tipWidget = null;				}				public void mouseHover (MouseEvent event) {					Point pt = new Point (event.x, event.y);					Widget widget = event.widget;					if (widget instanceof ToolBar) {						ToolBar w = (ToolBar) widget;						widget = w.getItem (pt);					}					if (widget instanceof Table) {						Table w = (Table) widget;						widget = w.getItem (pt);					}					if (widget instanceof Tree) {						Tree w = (Tree) widget;						widget = w.getItem (pt);					}					if (widget == null) {						tipShell.setVisible(false);						tipWidget = null;						return;					}					if (widget == tipWidget) return;					tipWidget = widget;					tipPosition = control.toDisplay(pt);					String text = (String) widget.getData("TIP_TEXT");					Image image = (Image) widget.getData("TIP_IMAGE");					tipLabelText.setText(text != null ? text : "");					tipLabelImage.setImage(image); // accepts null					tipShell.pack();					setHoverLocation(tipShell, tipPosition);					tipShell.setVisible(true);				}			});				/*			 * Trap F1 Help to pop up a custom help box			 */			control.addHelpListener(new HelpListener () {				public void helpRequested(HelpEvent event) {					if (tipWidget == null) return;					ToolTipHelpTextHandler handler = (ToolTipHelpTextHandler)						tipWidget.getData("TIP_HELPTEXTHANDLER");					if (handler == null) return;					String text = handler.getHelpText(tipWidget);					if (text == null) return;										if (tipShell.isVisible()) {						tipShell.setVisible(false);						Shell helpShell = new Shell(parentShell, SWT.SHELL_TRIM);						helpShell.setLayout(new FillLayout());						Label label = new Label(helpShell, SWT.NONE);						label.setText(text);						helpShell.pack();						setHoverLocation(helpShell, tipPosition);						helpShell.open();					}				}			});		}				/**		 * Sets the location for a hovering shell		 * @param shell the object that is to hover		 * @param position the position of a widget to hover over		 * @return the top-left location for a hovering box		 */		private void setHoverLocation(Shell shell, Point position) {			Rectangle displayBounds = shell.getDisplay().getBounds();			Rectangle shellBounds = shell.getBounds();			shellBounds.x = Math.max(Math.min(position.x, displayBounds.width - shellBounds.width), 0);			shellBounds.y = Math.max(Math.min(position.y + 16, displayBounds.height - shellBounds.height), 0);			shell.setBounds(shellBounds);		}	}		/**	 * ToolTip help handler	 */	protected interface ToolTipHelpTextHandler {		/**		 * Get help text		 * @param widget the widget that is under help		 * @return a help text string		 */		public String getHelpText(Widget widget);	}	}

⌨️ 快捷键说明

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