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

📄 paintexample.java

📁 eclipse 的程序源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************* * Copyright (c) 2000, 2005 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.swt.examples.paint;import org.eclipse.swt.*;import org.eclipse.swt.graphics.*;import org.eclipse.swt.widgets.*;import org.eclipse.swt.events.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.accessibility.*;import java.io.*;import java.text.*;import java.util.*;public class PaintExample {	private static ResourceBundle resourceBundle =		ResourceBundle.getBundle("examples_paint");	private Composite mainComposite;	private Canvas activeForegroundColorCanvas;	private Canvas activeBackgroundColorCanvas;	private Color paintColorBlack, paintColorWhite; // alias for paintColors[0] and [1]	private Color[] paintColors;	private Font paintDefaultFont; // do not free	private static final int numPaletteRows = 3;	private static final int numPaletteCols = 50;	private ToolSettings toolSettings; // current active settings	private PaintSurface paintSurface; // paint surface for drawing	static final int Pencil_tool = 0;	static final int Airbrush_tool = 1;	static final int Line_tool = 2;	static final int PolyLine_tool = 3;	static final int Rectangle_tool = 4;	static final int RoundedRectangle_tool = 5;	static final int Ellipse_tool = 6;	static final int Text_tool = 7;	static final int None_fill = 8;	static final int Outline_fill = 9;	static final int Solid_fill = 10;	static final int Solid_linestyle = 11;	static final int Dash_linestyle = 12;	static final int Dot_linestyle = 13;	static final int DashDot_linestyle = 14;	static final int Font_options = 15;		static final int Default_tool = Pencil_tool;	static final int Default_fill = None_fill;	static final int Default_linestyle = Solid_linestyle;		public static final Tool[] tools = {		new Tool(Pencil_tool, "Pencil", "tool", SWT.RADIO),		new Tool(Airbrush_tool, "Airbrush", "tool", SWT.RADIO),		new Tool(Line_tool, "Line", "tool", SWT.RADIO),		new Tool(PolyLine_tool, "PolyLine", "tool", SWT.RADIO),		new Tool(Rectangle_tool, "Rectangle", "tool", SWT.RADIO),		new Tool(RoundedRectangle_tool, "RoundedRectangle", "tool", SWT.RADIO),		new Tool(Ellipse_tool, "Ellipse", "tool", SWT.RADIO),		new Tool(Text_tool, "Text", "tool", SWT.RADIO),		new Tool(None_fill, "None", "fill", SWT.RADIO, new Integer(ToolSettings.ftNone)),		new Tool(Outline_fill, "Outline", "fill", SWT.RADIO, new Integer(ToolSettings.ftOutline)),		new Tool(Solid_fill, "Solid", "fill", SWT.RADIO, new Integer(ToolSettings.ftSolid)),		new Tool(Solid_linestyle, "Solid", "linestyle", SWT.RADIO, new Integer(SWT.LINE_SOLID)),		new Tool(Dash_linestyle, "Dash", "linestyle", SWT.RADIO, new Integer(SWT.LINE_DASH)),		new Tool(Dot_linestyle, "Dot", "linestyle", SWT.RADIO, new Integer(SWT.LINE_DOT)),		new Tool(DashDot_linestyle, "DashDot", "linestyle", SWT.RADIO, new Integer(SWT.LINE_DASHDOT)),		new Tool(Font_options, "Font", "options", SWT.PUSH)	};	/**	 * Creates an instance of a PaintExample embedded inside	 * the supplied parent Composite.	 * 	 * @param parent the container of the example	 */	public PaintExample(Composite parent) {		mainComposite = parent;		initResources();		initActions();		init();	}	/**	 * Invokes as a standalone program.	 */	public static void main(String[] args) {		Display display = new Display();		Shell shell = new Shell(display);		shell.setText(getResourceString("window.title"));		shell.setLayout(new GridLayout());		PaintExample instance = new PaintExample(shell);		instance.createToolBar(shell);		Composite composite = new Composite(shell, SWT.NONE);		composite.setLayout(new FillLayout());		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));		instance.createGUI(composite);		instance.setDefaults();		setShellSize(display, shell);		shell.open();		while (! shell.isDisposed()) {			if (! display.readAndDispatch()) display.sleep();		}		instance.dispose();	}		/**	 * Creates the toolbar.	 * Note: Only called by standalone.	 */	private void createToolBar(Composite parent) {		ToolBar toolbar = new ToolBar (parent, SWT.NONE);		String group = null;		for (int i = 0; i < tools.length; i++) {			Tool tool = tools[i];			if (group != null && !tool.group.equals(group)) {				new ToolItem (toolbar, SWT.SEPARATOR);			}			group = tool.group;			ToolItem item = addToolItem(toolbar, tool);			if (i == Default_tool || i == Default_fill || i == Default_linestyle) item.setSelection(true);		}	}	/**	 * Adds a tool item to the toolbar.	 * Note: Only called by standalone.	 */	private ToolItem addToolItem(final ToolBar toolbar, final Tool tool) {		final String id = tool.group + '.' + tool.name;		ToolItem item = new ToolItem (toolbar, tool.type);		item.setText (getResourceString(id + ".label"));		item.setToolTipText(getResourceString(id + ".tooltip"));		item.setImage(tool.image);		item.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent e) {				tool.action.run();			}		});		final int childID = toolbar.indexOf(item);		toolbar.getAccessible().addAccessibleListener(new AccessibleAdapter() {			public void getName(org.eclipse.swt.accessibility.AccessibleEvent e) {				if (e.childID == childID) {					e.result = getResourceString(id + ".description");				}			}		});		return item;	}	/**	 * Sets the default tool item states.	 */	public void setDefaults() {		setPaintTool(Default_tool);		setFillType(Default_fill);		setLineStyle(Default_linestyle);		setForegroundColor(paintColorBlack);		setBackgroundColor(paintColorWhite);	}	/**	 * Creates the GUI.	 */	public void createGUI(Composite parent) {		GridLayout gridLayout;		GridData gridData;		/*** Create principal GUI layout elements ***/				Composite displayArea = new Composite(parent, SWT.NONE);		gridLayout = new GridLayout();		gridLayout.numColumns = 1;		displayArea.setLayout(gridLayout);		// Creating these elements here avoids the need to instantiate the GUI elements		// in strict layout order.  The natural layout ordering is an artifact of using		// SWT layouts, but unfortunately it is not the same order as that required to		// instantiate all of the non-GUI application elements to satisfy referential		// dependencies.  It is possible to reorder the initialization to some extent, but		// this can be very tedious.				// paint canvas		final Canvas paintCanvas = new Canvas(displayArea, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL |			SWT.NO_REDRAW_RESIZE | SWT.NO_BACKGROUND);		gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);		paintCanvas.setLayoutData(gridData);		paintCanvas.setBackground(paintColorWhite);				// color selector frame		final Composite colorFrame = new Composite(displayArea, SWT.NONE);		gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);		colorFrame.setLayoutData(gridData);		// tool settings frame		final Composite toolSettingsFrame = new Composite(displayArea, SWT.NONE);		gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);		toolSettingsFrame.setLayoutData(gridData);		// status text		final Text statusText = new Text(displayArea, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY);		gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);		statusText.setLayoutData(gridData);		/*** Create the remaining application elements inside the principal GUI layout elements ***/			// paintSurface		paintSurface = new PaintSurface(paintCanvas, statusText, paintColorWhite);		// finish initializing the tool data		tools[Pencil_tool].data = new PencilTool(toolSettings, paintSurface);		tools[Airbrush_tool].data = new AirbrushTool(toolSettings, paintSurface);		tools[Line_tool].data = new LineTool(toolSettings, paintSurface);		tools[PolyLine_tool].data = new PolyLineTool(toolSettings, paintSurface);		tools[Rectangle_tool].data = new RectangleTool(toolSettings, paintSurface);		tools[RoundedRectangle_tool].data = new RoundedRectangleTool(toolSettings, paintSurface);		tools[Ellipse_tool].data = new EllipseTool(toolSettings, paintSurface);		tools[Text_tool].data = new TextTool(toolSettings, paintSurface);		// colorFrame				gridLayout = new GridLayout();		gridLayout.numColumns = 3;		gridLayout.marginHeight = 0;		gridLayout.marginWidth = 0;		colorFrame.setLayout(gridLayout);		// activeForegroundColorCanvas, activeBackgroundColorCanvas		activeForegroundColorCanvas = new Canvas(colorFrame, SWT.BORDER);		gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);		gridData.heightHint = 24;		gridData.widthHint = 24;		activeForegroundColorCanvas.setLayoutData(gridData);		activeBackgroundColorCanvas = new Canvas(colorFrame, SWT.BORDER);		gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);		gridData.heightHint = 24;		gridData.widthHint = 24;		activeBackgroundColorCanvas.setLayoutData(gridData);		// paletteCanvas		final Canvas paletteCanvas = new Canvas(colorFrame, SWT.BORDER | SWT.NO_BACKGROUND);		gridData = new GridData(GridData.FILL_HORIZONTAL);		gridData.heightHint = 24;		paletteCanvas.setLayoutData(gridData);		paletteCanvas.addListener(SWT.MouseDown, new Listener() {			public void handleEvent(Event e) {				Rectangle bounds = paletteCanvas.getClientArea();				Color color = getColorAt(bounds, e.x, e.y);													if (e.button == 1) setForegroundColor(color);				else setBackgroundColor(color);			}			private Color getColorAt(Rectangle bounds, int x, int y) {				if (bounds.height <= 1 && bounds.width <= 1) return paintColorWhite;				final int row = (y - bounds.y) * numPaletteRows / bounds.height;				final int col = (x - bounds.x) * numPaletteCols / bounds.width;				return paintColors[Math.min(Math.max(row * numPaletteCols + col, 0), paintColors.length - 1)];			}		});		Listener refreshListener = new Listener() {			public void handleEvent(Event e) {				if (e.gc == null) return;				Rectangle bounds = paletteCanvas.getClientArea();				for (int row = 0; row < numPaletteRows; ++row) {					for (int col = 0; col < numPaletteCols; ++col) {						final int x = bounds.width * col / numPaletteCols;						final int y = bounds.height * row / numPaletteRows;						final int width = Math.max(bounds.width * (col + 1) / numPaletteCols - x, 1);						final int height = Math.max(bounds.height * (row + 1) / numPaletteRows - y, 1);						e.gc.setBackground(paintColors[row * numPaletteCols + col]);						e.gc.fillRectangle(bounds.x + x, bounds.y + y, width, height);					}				}			}		};		paletteCanvas.addListener(SWT.Resize, refreshListener);		paletteCanvas.addListener(SWT.Paint, refreshListener);		//paletteCanvas.redraw();				// toolSettingsFrame		gridLayout = new GridLayout();		gridLayout.numColumns = 4;		gridLayout.marginHeight = 0;		gridLayout.marginWidth = 0;		toolSettingsFrame.setLayout(gridLayout);		Label label = new Label(toolSettingsFrame, SWT.NONE);

⌨️ 快捷键说明

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