📄 graphicsexample.java
字号:
/*******************************************************************************
* 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.graphics;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.Vector;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class GraphicsExample {
Composite parent;
GraphicsTab[] tabs;
GraphicsTab tab;
Object[] tabBackground;
boolean animate;
Listener redrawListener;
ToolBar toolBar;
Tree tabList;
Canvas canvas;
Composite controlPanel, tabPanel;
ToolItem playItem, pauseItem, backItem, dbItem;
Spinner timerSpinner;
Menu backMenu;
MenuItem customMI;
Image customImage;
Color customColor;
Vector images;
static boolean advanceGraphics, advanceGraphicsInit;
static final int TIMER = 30;
static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("examples_graphics"); //$NON-NLS-1$
public GraphicsExample(final Composite parent) {
this.parent = parent;
redrawListener = new Listener() {
public void handleEvent(Event e) {
redraw();
}
};
GridData data;
GridLayout layout = new GridLayout(3, false);
layout.horizontalSpacing = 1;
parent.setLayout(layout);
tabs = createTabs();
images = new Vector();
createToolBar(parent);
createTabList(parent);
final Sash sash = new Sash(parent, SWT.VERTICAL);
createTabPanel(parent);
data = new GridData(SWT.FILL, SWT.CENTER, true, false);
data.horizontalSpan = 3;
toolBar.setLayoutData(data);
data = new GridData(SWT.CENTER, SWT.FILL, false, true);
data.widthHint = tabList.computeSize(SWT.DEFAULT, SWT.DEFAULT).x + 50;
tabList.setLayoutData(data);
data = new GridData(SWT.CENTER, SWT.FILL, false, true);
sash.setLayoutData(data);
data = new GridData(SWT.FILL, SWT.FILL, true, true);
tabPanel.setLayoutData(data);
sash.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
if (event.detail != SWT.DRAG) {
GridData data = (GridData)tabList.getLayoutData();
data.widthHint = event.x - tabList.computeTrim(0, 0, 0, 0).width;
parent.layout(true);
animate = pauseItem.getEnabled();
} else {
animate = false;
}
}
});
setTab(tab);
startAnimationTimer();
}
boolean checkAdvancedGraphics() {
if (advanceGraphicsInit) return advanceGraphics;
advanceGraphicsInit = true;
Display display = Display.getCurrent();
try {
Path path = new Path(display);
path.dispose();
} catch (SWTException e) {
Shell shell = display.getActiveShell(), newShell = null;
if (shell == null) shell = newShell = new Shell(display);
MessageBox dialog = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK);
dialog.setText(RESOURCE_BUNDLE.getString("Warning")); //$NON-NLS-1$
dialog.setMessage(RESOURCE_BUNDLE.getString("LibNotFound")); //$NON-NLS-1$
dialog.open();
if (newShell != null) newShell.dispose();
return false;
}
return advanceGraphics = true;
}
void createCanvas(Composite parent) {
canvas = new Canvas(parent, SWT.NO_BACKGROUND);
canvas.addListener(SWT.Paint, new Listener() {
public void handleEvent(Event event) {
GC gc;
Rectangle rect = canvas.getClientArea();
Image buffer = null;
if (dbItem.getSelection()) {
buffer = new Image(canvas.getDisplay(), rect);
gc = new GC(buffer);
} else {
gc = event.gc;
}
paintBackground(gc, rect);
GraphicsTab tab = getTab();
if (tab != null) tab.paint(gc, rect.width, rect.height);
if (gc != event.gc) gc.dispose();
if (buffer != null) {
event.gc.drawImage(buffer, 0, 0);
buffer.dispose();
}
}
});
}
void createControlPanel(Composite parent) {
Group group;
controlPanel = group = new Group(parent, SWT.NONE);
group.setText(getResourceString("Settings")); //$NON-NLS-1$
controlPanel.setLayout(new RowLayout());
}
void createTabPanel(Composite parent) {
tabPanel = new Composite(parent, SWT.NONE);
GridData data;
GridLayout layout = new GridLayout(1, false);
layout.marginHeight = layout.marginWidth = 0;
tabPanel.setLayout(layout);
createCanvas(tabPanel);
createControlPanel(tabPanel);
data = new GridData(SWT.FILL, SWT.FILL, true, true);
canvas.setLayoutData(data);
data = new GridData(SWT.FILL, SWT.CENTER, true, false);
controlPanel.setLayoutData(data);
}
void createToolBar(final Composite parent) {
final Display display = parent.getDisplay();
toolBar = new ToolBar(parent, SWT.FLAT);
Listener toolBarListener = new Listener() {
public void handleEvent(Event event) {
switch (event.type) {
case SWT.Selection: {
if (event.widget == playItem) {
animate = true;
playItem.setEnabled(!animate);
pauseItem.setEnabled(animate);
} else if (event.widget == pauseItem) {
animate = false;
playItem.setEnabled(!animate);
pauseItem.setEnabled(animate);
} else if (event.widget == backItem) {
final ToolItem toolItem = (ToolItem) event.widget;
final ToolBar toolBar = toolItem.getParent();
Rectangle toolItemBounds = toolItem.getBounds();
Point point = toolBar.toDisplay(new Point(toolItemBounds.x, toolItemBounds.y));
backMenu.setLocation(point.x, point.y + toolItemBounds.height);
backMenu.setVisible(true);
}
}
break;
}
}
};
playItem = new ToolItem(toolBar, SWT.PUSH);
playItem.setText(getResourceString("Play")); //$NON-NLS-1$
playItem.setImage(loadImage(display, "play.gif")); //$NON-NLS-1$
playItem.addListener(SWT.Selection, toolBarListener);
pauseItem = new ToolItem(toolBar, SWT.PUSH);
pauseItem.setText(getResourceString("Pause")); //$NON-NLS-1$
pauseItem.setImage(loadImage(display, "pause.gif")); //$NON-NLS-1$
pauseItem.addListener(SWT.Selection, toolBarListener);
backItem = new ToolItem(toolBar, SWT.PUSH);
backItem.setText(getResourceString("Background")); //$NON-NLS-1$
backItem.addListener(SWT.Selection, toolBarListener);
String[] names = new String[]{
getResourceString("White"), //$NON-NLS-1$
getResourceString("Black"), //$NON-NLS-1$
getResourceString("Red"), //$NON-NLS-1$
getResourceString("Green"), //$NON-NLS-1$
getResourceString("Blue"), //$NON-NLS-1$
getResourceString("CustomColor"), //$NON-NLS-1$
};
Color[] colors = new Color[]{
display.getSystemColor(SWT.COLOR_WHITE),
display.getSystemColor(SWT.COLOR_BLACK),
display.getSystemColor(SWT.COLOR_RED),
display.getSystemColor(SWT.COLOR_GREEN),
display.getSystemColor(SWT.COLOR_BLUE),
null,
};
backMenu = new Menu(parent);
Listener listener = new Listener() {
public void handleEvent(Event event) {
MenuItem item = (MenuItem)event.widget;
if (customMI == item) {
ColorDialog dialog = new ColorDialog(parent.getShell());
RGB rgb = dialog.open();
if (rgb == null) return;
if (customColor != null) customColor.dispose();
customColor = new Color(display, rgb);
if (customImage != null) customImage.dispose();
customImage = createImage(display, customColor);
item.setData(new Object[]{customColor, customImage});
item.setImage(customImage);
}
tabBackground = (Object[])item.getData();
backItem.setImage((Image)tabBackground[1]);
canvas.redraw();
}
};
for (int i = 0; i < names.length; i++) {
MenuItem item = new MenuItem(backMenu, SWT.NONE);
item.setText(names[i]);
item.addListener(SWT.Selection, listener);
Image image = null;
if (colors[i] != null) {
image = createImage(display, colors[i]);
images.addElement(image);
item.setImage(image);
} else {
// custom menu item
customMI = item;
}
item.setData(new Object[]{colors[i], image});
if (tabBackground == null) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -