📄 brickbutton.java
字号:
/*
* Created on 2005-6-2
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package bomb;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.SWT;
import java.util.Observable;
import java.util.Observer;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class BrickButton extends Canvas implements Observer{
public BrickButton(Composite parent ,Game game,int x,int y){
super(parent,SWT.NONE);
this.game = game;
state = Brick.NORMAL;
text = "";
isTrap = false;
this.x = x;
this.y = y;
Listener listener = new Listener(){
public void handleEvent(Event event){
switch(event.type){
case SWT.MouseDown:
case SWT.MouseUp:processMouseClickEvent(event);break;
case SWT.Paint:paintControl(event);break;
}
}
};
addListener(SWT.Paint,listener);
//addListener(SWT.MouseDown,listener);
addListener(SWT.MouseUp,listener);
}
private void paintControl(Event event){
Rectangle rect = this.getClientArea();
GC gc = event.gc;
if (state .equals(Brick.NORMAL) || state .equals(Brick.TAGGED)){
gc.setForeground(white);
gc.drawLine( rect.x,rect.y,rect.width,rect.y);
gc.drawLine( rect.x,rect.y,rect.x,rect.height);
gc.setForeground(shadow);
gc.drawLine( rect.width -1,rect.y,rect.width -1,rect.height);
gc.drawLine( rect.x,rect.height -1 ,rect.width-1,rect.height-1);
if (state.equals(Brick.TAGGED)){
gc.drawImage(GlobalInfo.getFlagImage(),
rect.x +1,rect.y+1);
}
}else{
gc.setForeground(shadow);
gc.drawLine( rect.x,rect.y,rect.width,rect.y);
gc.drawLine( rect.x,rect.y,rect.x,rect.height);
//gc.setForeground(white);
gc.drawLine( rect.width -1,rect.y,rect.width -1,rect.height);
gc.drawLine( rect.x,rect.height -1 ,rect.width-1,rect.height-1);
if (isTrap){
if (state.equals(Brick.DIGGED)){
gc.drawImage(GlobalInfo.getTrapImage(),
rect.x +1,rect.y+1);
}else {
gc.drawImage(GlobalInfo.getBombImage(),
rect.x +1,rect.y+1);
}
}else if (text != null && text.trim() .length() >0)
{
int textI = Integer.parseInt(text);
if (textI == 0 ){
//gc.setForeground(shadow);
}else if (textI < 3 ){
gc.setForeground(green);
}else if (textI < 5){
gc.setForeground(blue);
} else {
gc.setForeground(red);
}
if (textI > 0){
//gc.drawString( 1)
//FontMetrics metrics = gc.getFontMetrics();
gc.getFont().getFontData();
//if (fontData == null){
//fontData = gc.getFont().getFontData();
//gc.
//fontData.setStyle(SWT.BOLD);
fontData = new FontData("宋体",9,SWT.BOLD);
gc.setFont(new Font(this.getDisplay(),fontData));
//}
Point point = gc.stringExtent( text);
gc.drawString(text,(rect.width - point.x )/2,(rect.width - point.y)/2);
}
}
}
}
private void processMouseClickEvent(Event event){
if ((event.stateMask & SWT.BUTTON1) != 0){
this.game.dig(x,y);
}else if((event.stateMask & SWT.BUTTON3) != 0){
//state = Brick.DIGGED;
if (this.state.equals(Brick.NORMAL)){
this.game.tag(x,y);
}else{
this.game.untag(x,y);
}
}
}
public Point computeSize(int hWint,int hHint,boolean flag){
return new Point(15,15);
}
public void update(Observable observable,Object target){
Brick brick = (Brick)observable;
//System.out.println( brick.getX());
this.text = new Integer(brick.getBombs()).toString();
this.state = brick.getState();
isTrap = brick.getTrap();
redraw();
}
private Color white = this.getDisplay().getSystemColor(SWT.COLOR_WHITE);
private Color shadow = this.getDisplay().getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW);
private Color red = this.getDisplay().getSystemColor(SWT.COLOR_RED);
private Color blue = this.getDisplay().getSystemColor(SWT.COLOR_BLUE);
private Color green= this.getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN);
private String state = Brick.NORMAL;
private String text = "";
private boolean isTrap = false;
private Game game = null;
private FontData fontData = null;
private int x = 0;
private int y = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -