📄 gradientdialog.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.swt.examples.graphics;import java.util.*;import org.eclipse.swt.*;import org.eclipse.swt.graphics.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;/** * This dialog is used for prompting the user to select two colors for the * creation of a gradient. */public class GradientDialog extends Dialog { Canvas canvas; Button colorButton1, colorButton2; // color buttons Button okButton, cancelButton; Menu menu1, menu2; RGB rgb1, rgb2; // first and second color used in gradient int returnVal; // value to be returned by open(), set to SWT.OK // if the ok button has been pressed ArrayList resources; public GradientDialog(Shell parent) { this (parent, SWT.PRIMARY_MODAL); } public GradientDialog(Shell parent, int style) { super(parent, style); rgb1 = rgb2 = null; returnVal = SWT.CANCEL; resources = new ArrayList(); } /** * Sets up the dialog and opens it. * */ public int open() { final Shell dialog = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.RESIZE | getStyle()); dialog.setText(GraphicsExample.getResourceString("Gradient")); //$NON-NLS-1$ GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 2; gridLayout.marginHeight = 10; gridLayout.marginWidth = 10; dialog.setLayout(gridLayout); // create the controls in the dialog createDialogControls(dialog); dialog.addListener(SWT.Close, new Listener() { public void handleEvent(Event event) { for (int i = 0; i < resources.size(); i++) { Object obj = resources.get(i); if (obj != null && obj instanceof Resource) { ((Resource) obj).dispose(); } } dialog.dispose(); } }); dialog.setDefaultButton (okButton); dialog.pack (); Rectangle rect = getParent().getMonitor().getBounds(); Rectangle bounds = dialog.getBounds(); dialog.setLocation(rect.x + (rect.width - bounds.width) / 2, rect.y + (rect.height - bounds.height) / 2); dialog.setMinimumSize(bounds.width, bounds.height); dialog.open (); Display display = getParent().getDisplay(); while (!dialog.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } if (menu1 != null) { menu1.dispose(); menu1 = null; } if (menu2 != null) { menu2.dispose(); menu2 = null; } return returnVal; } /** * Creates the controls of the dialog. * */ public void createDialogControls(final Shell parent) { final Display display = parent.getDisplay(); // message Label message = new Label(parent, SWT.NONE); message.setText(GraphicsExample.getResourceString("GradientDlgMsg")); GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); gridData.horizontalSpan = 2; message.setLayoutData(gridData); // default colors are white and black if (rgb1 == null || rgb2 == null) { rgb1 = display.getSystemColor(SWT.COLOR_WHITE).getRGB(); rgb2 = display.getSystemColor(SWT.COLOR_BLACK).getRGB(); } // canvas canvas = new Canvas(parent, SWT.NONE); gridData = new GridData(GridData.FILL_BOTH); gridData.widthHint = 200; gridData.heightHint = 100; canvas.setLayoutData(gridData); canvas.addListener (SWT.Paint, new Listener () { public void handleEvent (Event e) { Image preview = null; Point size = canvas.getSize(); Color color1 = new Color(display, rgb1); Color color2 = new Color(display, rgb2); preview = GraphicsExample.createImage(display, color1, color2, size.x, size.y); if (preview != null) { e.gc.drawImage (preview, 0, 0); } preview.dispose(); color1.dispose(); color2.dispose(); } }); // composite used for both color buttons Composite colorButtonComp = new Composite(parent, SWT.NONE); // layout buttons RowLayout layout = new RowLayout();; layout.type = SWT.VERTICAL; layout.pack = false; colorButtonComp.setLayout(layout); // position composite gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); colorButtonComp.setLayoutData(gridData); ColorMenu colorMenu = new ColorMenu(); // color controls: first color colorButton1 = new Button(colorButtonComp, SWT.PUSH); colorButton1.setText(GraphicsExample.getResourceString("GradientDlgButton1")); Color color1 = new Color(display, rgb1); Image img1 = GraphicsExample.createImage(display, color1); color1.dispose(); colorButton1.setImage(img1); resources.add(img1); menu1 = colorMenu.createMenu(parent.getParent(), new ColorListener() { public void setColor(GraphicsBackground gb) { rgb1 = gb.getBgColor1().getRGB(); colorButton1.setImage(gb.getThumbNail()); if (canvas != null) canvas.redraw(); } }); colorButton1.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { final Button button = (Button) event.widget; final Composite parent = button.getParent(); Rectangle bounds = button.getBounds(); Point point = parent.toDisplay(new Point(bounds.x, bounds.y)); menu1.setLocation(point.x, point.y + bounds.height); menu1.setVisible(true); } }); // color controls: second color colorButton2 = new Button(colorButtonComp, SWT.PUSH); colorButton2.setText(GraphicsExample.getResourceString("GradientDlgButton2")); Color color2 = new Color(display, rgb2); Image img2 = GraphicsExample.createImage(display, color2); color2.dispose(); colorButton2.setImage(img2); resources.add(img2); menu2 = colorMenu.createMenu(parent.getParent(), new ColorListener() { public void setColor(GraphicsBackground gb) { rgb2 = gb.getBgColor1().getRGB(); colorButton2.setImage(gb.getThumbNail()); if (canvas != null) canvas.redraw(); } }); colorButton2.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { final Button button = (Button) event.widget; final Composite parent = button.getParent(); Rectangle bounds = button.getBounds(); Point point = parent.toDisplay(new Point(bounds.x, bounds.y)); menu2.setLocation(point.x, point.y + bounds.height); menu2.setVisible(true); } }); // composite used for ok and cancel buttons Composite okCancelComp = new Composite(parent, SWT.NONE); // layout buttons RowLayout rowLayout = new RowLayout(); rowLayout.pack = false; rowLayout.marginTop = 5; okCancelComp.setLayout(rowLayout); // position composite gridData = new GridData(GridData.HORIZONTAL_ALIGN_END); gridData.horizontalSpan = 2; okCancelComp.setLayoutData(gridData); // OK button okButton = new Button (okCancelComp, SWT.PUSH); okButton.setText("&OK"); okButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { returnVal = SWT.OK; parent.close(); } }); // cancel button cancelButton = new Button (okCancelComp, SWT.PUSH); cancelButton.setText("&Cancel"); cancelButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { parent.close(); } }); } /** * Returns the first RGB selected by the user. * */ public RGB getFirstRGB() { return rgb1; } /** * Sets the first RGB. * @param rgb */ public void setFirstRGB(RGB rgb) { this.rgb1 = rgb; } /** * Returns the second RGB selected by the user. * */ public RGB getSecondRGB() { return rgb2; } /** * Sets the second RGB. * @param rgb */ public void setSecondRGB(RGB rgb) { this.rgb2 = rgb; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -