?? blockview.java
字號:
package mine.view;
import java.util.*;
import java.awt.event.*;
import mine.listener.*;
import mine.model.*;
//問題修正說明
//在發布javamine 1。0時,該類從JLabel 繼承只為了使用setIcon,造成打開大幅畫面緩慢
//性能的瓶頸在于jlable太大了,而不僅在于我使用了遞歸算法
public class BlockView
extends ImagePanel
implements Observer {
private int xx; //提供此參數是因為當沒有M 時仍可以創建視圖
private int yy;
private boolean mousebutton1 = false; //為了測試鼠標事件
private boolean mousebutton2 = false;
private boolean mousebuttonPress1 = false;
private boolean mousebuttonPress2 = false;
private boolean mousebuttonRelease1=false;
private boolean mousebuttonRelease2=false;
public static final int blocksize = 16;
private Set gameMouselistenerS = new HashSet();
private ImageFactory imageFactory = ImageFactory.getInstance();
private BlockModel blockModel;
public int getBlockSize() {
return blocksize;
}
public BlockView(BlockModel block) {
super();
this.blockModel = block;
xx = block.getXPos();
yy = block.getYPos();
baseinit(xx, yy);
mouseListenerinit();
}
public BlockView(int x, int y) {
super();
xx = x;
yy = y;
baseinit(xx, yy);
mouseListenerinit();
}
public void update(Observable observable, Object object) {
if (blockModel.isOpened()) { //開啟
openblock();
blockModel.setOpened(true);
}
else {
if (blockModel.getMark() == BlockModel.UnopenMark) {
if (blockModel.isdown()) {
this.setIcon(imageFactory.getImageicon(0));
}
else {
this.setIcon(imageFactory.getImageicon(BlockModel.
UnopenMark));
}
}
else {
this.setIcon(imageFactory.getImageicon(blockModel.getMark()));
}
}
}
private void openblock() {
if (blockModel.isMine()) { //是雷?
if (blockModel.isOnmine()) {
this.setIcon(imageFactory.getImageicon(12)); //踩雷了;
}
else {
this.setIcon(imageFactory.getImageicon(11)); //正常雷的顯示
}
}
else { //是數字
if (blockModel.isWrongMineOpinion()) {
this.setIcon(imageFactory.getImageicon(15)); //錯誤判斷;
}
else {
this.setIcon(imageFactory.getImageicon(blockModel.getNumber()));
}
}
}
public void setModel(BlockModel bm) {
blockModel = bm;
bm.addObserver(this);
}
public void removeModel() {
blockModel.deleteObserver(this);
blockModel = null;
}
private void baseinit(int xx, int yy) {
this.setIcon(imageFactory.getImageicon(9));
// this.setBorder(BorderFactory.createRaisedBevelBorder());
this.setBounds(xx * blocksize, yy * blocksize, blocksize, blocksize);
}
private void notifyMouseEvent(GameMouseEvent gme) {
if (gameMouselistenerS.size() != 0) {
Iterator it = gameMouselistenerS.iterator();
while (it.hasNext()) {
GameMouseListener gml = (GameMouseListener) it.
next();
gml.processGameEvent(gme);
}
}
}
private void mouseListenerinit() {
this.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent mouseEvent) {
if(blockModel!=null&&mouseEvent.getButton() == MouseEvent.BUTTON1){
blockModel.setdown(true);
}
if (mouseEvent.getButton() == MouseEvent.BUTTON1) {
BlockView.this.mousebutton1 = true;
BlockView.this.mousebuttonPress1 = true;
notifyMouseEvent(new GameMouseEvent(
BlockView.this.xx, BlockView.this.yy,
GameMouseEvent.LeftPress));
}
if (mouseEvent.getButton() == MouseEvent.BUTTON3) {
BlockView.this.mousebutton2 = true;
BlockView.this.mousebuttonPress2 = true;
}
if( BlockView.this.mousebuttonPress1 && BlockView.this.mousebuttonPress2){
notifyMouseEvent(new GameMouseEvent(
BlockView.this.xx, BlockView.this.yy,
GameMouseEvent.LRPress));
}
}
public void mouseReleased(MouseEvent mouseEvent) {
if(blockModel!=null&&mouseEvent.getButton() == MouseEvent.BUTTON1){
blockModel.setdown(false);
}
if(mouseEvent.getButton()==MouseEvent.BUTTON1){
mousebuttonRelease1=true;
notifyMouseEvent(new GameMouseEvent(
BlockView.this.xx, BlockView.this.yy,
GameMouseEvent.leftRealse));
}
if(mouseEvent.getButton()==mouseEvent.BUTTON3){
mousebuttonRelease2=true;
}
if(mousebuttonPress1&&mousebuttonPress2&&mousebuttonRelease1&&mousebuttonRelease2){
notifyMouseEvent(new GameMouseEvent(
BlockView.this.xx, BlockView.this.yy,
GameMouseEvent.LRRelease));
mousebuttonPress1=false;
mousebuttonPress2=false;
mousebuttonRelease1=false;
mousebuttonRelease2=false;
}
if (mouseEvent.getX() >= 0 &&
mouseEvent.getX() <= BlockView.this.getWidth() &&
mouseEvent.getY() >= 0 &&
mouseEvent.getY() <= BlockView.this.getHeight()
) {
if (BlockView.this.mousebutton1 == true &&
BlockView.this.mousebutton2 == true) {
notifyMouseEvent(new GameMouseEvent(
BlockView.this.xx, BlockView.this.yy,
GameMouseEvent.LRClick));
//左右雙擊
}
else if (BlockView.this.mousebutton1 == true) {
notifyMouseEvent(new GameMouseEvent(
BlockView.this.xx, BlockView.this.yy,
GameMouseEvent.LeftClick));
}
//左
else if (BlockView.this.mousebutton2 == true) {
notifyMouseEvent(new GameMouseEvent(
BlockView.this.xx, BlockView.this.yy,
GameMouseEvent.RightClick)); //右
}}
BlockView.this.mousebutton2 = false;
BlockView.this.mousebutton1 = false;
}
});
}
public Set getGameMouselistener() {
return gameMouselistenerS;
}
public void addGameMouseListener(GameMouseListener gameMouselistener) {
gameMouselistenerS.add(gameMouselistener);
}
public void removeGameMouseListener(GameMouseListener gameMouselistener) {
gameMouselistenerS.remove(gameMouselistener);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -