📄 imageandmessagearea.java
字号:
/******************************************************************************* * Copyright (c) 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation ******************************************************************************/package org.eclipse.jface.dialogs;import org.eclipse.jface.fieldassist.DecoratedField;import org.eclipse.jface.fieldassist.FieldDecorationRegistry;import org.eclipse.jface.fieldassist.TextControlCreator;import org.eclipse.jface.resource.JFaceResources;import org.eclipse.swt.SWT;import org.eclipse.swt.events.PaintEvent;import org.eclipse.swt.events.PaintListener;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.Font;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.Rectangle;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Layout;import org.eclipse.swt.widgets.Text;/** * Instances of this class provide a message area to display * a message and an associated image. * * @since 3.2 * * This class is not intended to be extended by clients. * */public class ImageAndMessageArea extends Composite { private int BORDER_MARGIN = IDialogConstants.HORIZONTAL_SPACING/2; private DecoratedField messageField; private Composite container; /** * Constructs a new ImageAndMessageArea with an empty decorated field. * Calls to <code>setText(String text)</code> and <code>setImage(Image image)</code> * are required in order to fill the message area. Also, the instance will be invisible * when initially created. * <p> * The style bit <code>SWT.WRAP</code> should be used if a larger message area is desired.</p> * * @param parent the parent composite * @param style the SWT style bits. Using SWT.WRAP will create a larger message area. */ public ImageAndMessageArea(Composite parent, int style) { super(parent, style); container = new Composite(this, style); GridLayout glayout = new GridLayout(); glayout.numColumns = 2; glayout.marginWidth = 0; glayout.marginHeight = 0; glayout.marginTop = BORDER_MARGIN; glayout.marginBottom = BORDER_MARGIN; container.setLayout(glayout); messageField = new DecoratedField(container,SWT.READ_ONLY | style,new TextControlCreator()); setFont(JFaceResources.getDialogFont()); GridData gd = new GridData(SWT.FILL,SWT.FILL,true,true); int lineHeight = ((Text) messageField.getControl()).getLineHeight(); if((style & SWT.WRAP) > 0) gd.heightHint = 2 * lineHeight; else gd.heightHint = lineHeight; messageField.getLayoutControl().setLayoutData(gd); addPaintListener(new PaintListener() { /* (non-Javadoc) * @see org.eclipse.swt.events.PaintListener#paintControl(org.eclipse.swt.events.PaintEvent) */ public void paintControl(PaintEvent e) { onPaint(e); } }); // sets the layout and size to account for the BORDER_MARGIN between // the border drawn around the container and the decorated field. setLayout(new Layout() { /* (non-Javadoc) * @see org.eclipse.swt.widgets.Layout#layout(org.eclipse.swt.widgets.Composite, boolean) */ public void layout(Composite parent, boolean changed) { Rectangle carea = getClientArea(); container.setBounds(carea.x + BORDER_MARGIN, carea.y + BORDER_MARGIN, carea.width - (2 * BORDER_MARGIN), carea.height - (2 * BORDER_MARGIN)); } /* (non-Javadoc) * @see org.eclipse.swt.widgets.Layout#computeSize(org.eclipse.swt.widgets.Composite, int, int, boolean) */ public Point computeSize(Composite parent, int wHint, int hHint, boolean changed) { Point size; size = container.computeSize(wHint, hHint, changed); // size set to account for the BORDER_MARGIN on // all sides of the decorated field size.x += 4; size.y += 4; return size; } }); setVisible(false); } /* (non-Javadoc) * @see org.eclipse.swt.widgets.Control#setBackground(org.eclipse.swt.graphics.Color) */ public void setBackground(Color bg) { super.setBackground(bg); messageField.getLayoutControl().setBackground(bg); messageField.getControl().setBackground(bg); container.setBackground(bg); } /** * Sets the text in the decorated field which will be displayed * in the message area. * * @param text the text to be displayed in the message area * * @see org.eclipse.swt.widgets.Text#setText(String string) */ public void setText(String text) { ((Text) messageField.getControl()).setText(text); } /** * Adds an image to decorated field to be shown in the message area. * * @param image desired image to be shown in the ImageAndMessageArea */ public void setImage(Image image) { FieldDecorationRegistry registry = FieldDecorationRegistry.getDefault(); registry.registerFieldDecoration("messageImage", null, image); //$NON-NLS-1$ messageField.addFieldDecoration(registry.getFieldDecoration("messageImage"), //$NON-NLS-1$ SWT.LEFT | SWT.TOP, false); } /** * Draws the message area composite with rounded corners. */ private void onPaint(PaintEvent e) { Rectangle carea = getClientArea(); e.gc.setForeground(getForeground()); // draws the polyline to be rounded in a 2 pixel squared area e.gc.drawPolyline(new int[] { carea.x, carea.y + carea.height - 1, carea.x, carea.y + 2, carea.x + 2, carea.y, carea.x + carea.width - 3, carea.y, carea.x + carea.width - 1, carea.y + 2, carea.x + carea.width - 1, carea.y + carea.height - 1 }); } /* (non-Javadoc) * @see org.eclipse.swt.widgets.Control#setFont(org.eclipse.swt.graphics.Font) */ public void setFont(Font font) { super.setFont(font); ((Text) messageField.getControl()).setFont(font); } /* (non-Javadoc) * @see org.eclipse.swt.widgets.Control#setToolTipText(java.lang.String) */ public void setToolTipText(String text){ super.setToolTipText(text); ((Text) messageField.getControl()).setToolTipText(text); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -