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

📄 clabel.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.widgets.*;import org.eclipse.swt.graphics.*;import org.eclipse.swt.events.*;import org.eclipse.swt.accessibility.*;/** * A Label which supports aligned text and/or an image and different border styles. * <p> * If there is not enough space a CLabel uses the following strategy to fit the  * information into the available space: * <pre> * 		ignores the indent in left align mode * 		ignores the image and the gap * 		shortens the text by replacing the center portion of the label with an ellipsis * 		shortens the text by removing the center portion of the label * </pre> * <p> * <dl> * <dt><b>Styles:</b> * <dd>LEFT, RIGHT, CENTER, SHADOW_IN, SHADOW_OUT, SHADOW_NONE</dd> * <dt><b>Events:</b> * <dd></dd> * </dl> *  * </p><p> * IMPORTANT: This class is <em>not</em> intended to be subclassed. * </p> */public class CLabel extends Canvas {	/** Gap between icon and text */	private static final int GAP = 5;	/** Left and right margins */	private static final int INDENT = 3;	/** a string inserted in the middle of text that has been shortened */	private static final String ELLIPSIS = "..."; //$NON-NLS-1$ // could use the ellipsis glyph on some platforms "\u2026"	/** the alignment. Either CENTER, RIGHT, LEFT. Default is LEFT*/	private int align = SWT.LEFT;	private int hIndent = INDENT;	private int vIndent = INDENT;	/** the current text */	private String text;	/** the current icon */	private Image image;	// The tooltip is used for two purposes - the application can set	// a tooltip or the tooltip can be used to display the full text when the	// the text has been truncated due to the label being too short.	// The appToolTip stores the tooltip set by the application.  Control.tooltiptext 	// contains whatever tooltip is currently being displayed.	private String appToolTipText;		private Image backgroundImage;	private Color[] gradientColors;	private int[] gradientPercents;	private boolean gradientVertical;/** * Constructs a new instance of this class given its parent * 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 widget which will be the parent of the new instance (cannot be null) * @param style the style of widget 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> * </ul> * * @see SWT#LEFT * @see SWT#RIGHT * @see SWT#CENTER * @see SWT#SHADOW_IN * @see SWT#SHADOW_OUT * @see SWT#SHADOW_NONE * @see #getStyle() */public CLabel(Composite parent, int style) {	super(parent, checkStyle(style));		if ((style & SWT.CENTER) != 0) align = SWT.CENTER;	if ((style & SWT.RIGHT) != 0)  align = SWT.RIGHT;	if ((style & SWT.LEFT) != 0)   align = SWT.LEFT;		addPaintListener(new PaintListener(){		public void paintControl(PaintEvent event) {			onPaint(event);		}	});		addDisposeListener(new DisposeListener(){		public void widgetDisposed(DisposeEvent event) {			onDispose(event);		}	});	initAccessible();}/** * Check the style bits to ensure that no invalid styles are applied. */private static int checkStyle (int style) {	if ((style & SWT.BORDER) != 0) style |= SWT.SHADOW_IN;	int mask = SWT.SHADOW_IN | SWT.SHADOW_OUT | SWT.SHADOW_NONE | SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;	style = style & mask;	style |= SWT.NO_FOCUS;	if ((style & (SWT.CENTER | SWT.RIGHT)) == 0) style |= SWT.LEFT;	//TEMPORARY CODE	/*	 * The default background on carbon and some GTK themes is not a solid color 	 * but a texture.  To show the correct default background, we must allow	 * the operating system to draw it and therefore, we can not use the 	 * NO_BACKGROUND style.  The NO_BACKGROUND style is not required on platforms	 * that use double buffering which is true in both of these cases.	 */	String platform = SWT.getPlatform();	if ("carbon".equals(platform) || "gtk".equals(platform)) return style; //$NON-NLS-1$ //$NON-NLS-2$	return style | SWT.NO_BACKGROUND;}//protected void checkSubclass () {//	String name = getClass().getName ();//	String validName = CLabel.class.getName();//	if (!validName.equals(name)) {//		SWT.error (SWT.ERROR_INVALID_SUBCLASS);//	}//}public Point computeSize(int wHint, int hHint, boolean changed) {	checkWidget();	Point e = getTotalSize(image, text);	if (wHint == SWT.DEFAULT){		e.x += 2*hIndent;	} else {		e.x = wHint;	}	if (hHint == SWT.DEFAULT) {		e.y += 2*vIndent;	} else {		e.y = hHint;	}	return e;}/** * Draw a rectangle in the given colors. */private void drawBevelRect(GC gc, int x, int y, int w, int h, Color topleft, Color bottomright) {	gc.setForeground(bottomright);	gc.drawLine(x+w, y,   x+w, y+h);	gc.drawLine(x,   y+h, x+w, y+h);		gc.setForeground(topleft);	gc.drawLine(x, y, x+w-1, y);	gc.drawLine(x, y, x,     y+h-1);}/** * Returns the alignment. * The alignment style (LEFT, CENTER or RIGHT) is returned. *  * @return SWT.LEFT, SWT.RIGHT or SWT.CENTER */public int getAlignment() {	//checkWidget();	return align;}/** * Return the CLabel's image or <code>null</code>. *  * @return the image of the label or null */public Image getImage() {	//checkWidget();	return image;}/** * Compute the minimum size. */private Point getTotalSize(Image image, String text) {	Point size = new Point(0, 0);		if (image != null) {		Rectangle r = image.getBounds();		size.x += r.width;		size.y += r.height;	}			GC gc = new GC(this);	if (text != null && text.length() > 0) {		Point e = gc.textExtent(text);		size.x += e.x;		size.y = Math.max(size.y, e.y);		if (image != null) size.x += GAP;	} else {		size.y = Math.max(size.y, gc.getFontMetrics().getHeight());	}	gc.dispose();		return size;}public void setToolTipText (String string) {	super.setToolTipText (string);	appToolTipText = super.getToolTipText();}	/** * Return the Label's text. *  * @return the text of the label or null */public String getText() {	//checkWidget();	return text;}public String getToolTipText () {	checkWidget();	return appToolTipText;}/** * Paint the Label's border. */private void paintBorder(GC gc, Rectangle r) {	Display disp= getDisplay();	Color c1 = null;	Color c2 = null;		int style = getStyle();	if ((style & SWT.SHADOW_IN) != 0) {		c1 = disp.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);		c2 = disp.getSystemColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);	}	if ((style & SWT.SHADOW_OUT) != 0) {				c1 = disp.getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW);		c2 = disp.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);	}			if (c1 != null && c2 != null) {		gc.setLineWidth(1);		drawBevelRect(gc, r.x, r.y, r.width-1, r.height-1, c1, c2);	}}private void initAccessible() {	Accessible accessible = getAccessible();	accessible.addAccessibleListener(new AccessibleAdapter() {		public void getName(AccessibleEvent e) {			e.result = getText();		}				public void getHelp(AccessibleEvent e) {			e.result = getToolTipText();		}	});			accessible.addAccessibleControlListener(new AccessibleControlAdapter() {		public void getChildAtPoint(AccessibleControlEvent e) {			Point pt = toControl(new Point(e.x, e.y));			e.childID = (getBounds().contains(pt)) ? ACC.CHILDID_SELF : ACC.CHILDID_NONE;		}				public void getLocation(AccessibleControlEvent e) {			Rectangle location = getBounds();			Point pt = toDisplay(new Point(location.x, location.y));			e.x = pt.x;			e.y = pt.y;			e.width = location.width;			e.height = location.height;		}				public void getChildCount(AccessibleControlEvent e) {			e.detail = 0;		}				public void getRole(AccessibleControlEvent e) {			e.detail = ACC.ROLE_LABEL;		}				public void getState(AccessibleControlEvent e) {			e.detail = ACC.STATE_READONLY;		}				public void getValue(AccessibleControlEvent e) {			e.result = getText();		}	});}void onDispose(DisposeEvent event) {	gradientColors = null;	gradientPercents = null;	backgroundImage = null;	text = null;	image = null;	appToolTipText = null;}/*  * Process the paint event */void onPaint(PaintEvent event) {	Rectangle rect = getClientArea();	if (rect.width == 0 || rect.height == 0) return;		boolean shortenText = false;	String t = text;	Image img = image;	int availableWidth = rect.width - 2*hIndent;	Point extent = getTotalSize(img, t);	if (extent.x > availableWidth) {		img = null;		extent = getTotalSize(img, t);		if (extent.x > availableWidth) {			shortenText = true;		}	}		GC gc = event.gc;			// shorten the text	if (shortenText) {		t = shortenText(gc, text, availableWidth);		extent = getTotalSize(img, t);		if (appToolTipText == null) {			super.setToolTipText(text);		}	} else {

⌨️ 快捷键说明

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