📄 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 + -