Java扫雷程序左右键同时按下的问题
改成
站在用户的角度思考问题,与客户深入沟通,找到华亭网站设计与华亭网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、成都网站设计、企业官网、英文网站、手机端网站、网站推广、域名申请、虚拟主机、企业邮箱。业务覆盖华亭地区。
int onmask = e.BUTTON1_DOWN_MASK | e.BUTTON3_DOWN_MASK;
if ((e.getModifiersEx() onmask) == onmask) {
System.out.println("ok");
}
API文档:
getModifiersEx
public int getModifiersEx()
返回此事件的扩展修饰符掩码。扩展修饰符表示所有模式键的状态,例如 ALT、CTRL、META 和事件发生后那一刻的鼠标按钮
例如,如果用户在按下 button 1 后又按下 button 2,然后以相同的顺序释放这两个按钮,则会生成以下事件序列:
MOUSE_PRESSED: BUTTON1_DOWN_MASK
MOUSE_PRESSED: BUTTON1_DOWN_MASK | BUTTON2_DOWN_MASK
MOUSE_RELEASED: BUTTON2_DOWN_MASK
MOUSE_CLICKED: BUTTON2_DOWN_MASK
MOUSE_RELEASED:
MOUSE_CLICKED:
建议不使用 == 来比较此方法的返回值,因为在以后会增加新的修饰符。例如,检查 SHIFT 和 BUTTON1 已经按下而 CTRL 未按下的正确方法可以通过以下代码来演示:
int onmask = SHIFT_DOWN_MASK | BUTTON1_DOWN_MASK;
int offmask = CTRL_DOWN_MASK;
if (event.getModifiersEx() (onmask | offmask) == onmask) {
...
}
即使添加了新的修饰符,上述代码仍然有效。
从以下版本开始:
1.4
JAVA扫雷游戏问题
能得到当前 JLabel 的 x, y 值计算出来。clickedLabel.getBounds() 或 mouseClickedEvent.getPoint() 。
理论上,所有格子都是相同的正方形,所以只需要知道第一个格子的 x,y 应该能知道任意一个 (row,col) 的格子的 x, y,而当我们知道击中的格子的 x, y 时就应该能反过来计算出它是第几行第几列。这其中是单一映射关系。
帮忙下java 扫雷常量代码 提示 could not find the main class constants will exit 还抛出数组越界异常
for(int i=0;iTIME.length;i++)
{
FACE [i] = new ImageIcon("./img/di.gif");;//图 时间
}
改:
for(int i=0;iTIME.length;i++)
{
TIME[i] = new ImageIcon("./img/di.gif");;//图 时间
}
COPY的时候不认真吧。
java的扫雷程序的一些问题
楼主你好
(问题1)
lz说改变字体的大小有问题 这个应该不会这样的 改变字体(Font)是可以的
给lz一个例子:
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame{
private JLabel[] num = new JLabel[100];
public Test(){
super("改变字体大小");
setLayout(new GridLayout(10,10));
for (int i = 0; i num.length; i++) {
num[i] = new JLabel("" + (i+1));
num[i].setFont(new Font("宋体", Font.PLAIN, 10));
//这里如果不设置字体大小 那么数字100就不能显示
getContentPane().add(num[i]);
}
setLocation(200,200);
setSize(200,200);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(3);
}
public static void main (String[] args) {
new Test();
}
}
(问题2)
你使用的应该是GridLayout这个布局管理器吧
那么在使用了java自带的布局管理器后 大多数都是不能修改这个布局管理器下的组件的大小和位置
如果你非要自己定义组件的大小 那么就只能不使用布局管理器了(setLayout(null))
在不使用布局管理器的情况下可以自由设置组件的大小的位置 但是这样很麻烦
希望能帮助你哈
JAVA 扫雷的一段代码求解释
int BombNum, BlockNum; // 当前雷数,当前方块数
int rightBomb, restBomb, restBlock; // 找到的地雷数,剩余雷数,剩余方块数
JButton start = new JButton(" 开始 ");
JPanel MenuPamel = new JPanel(); //新建一个区域,看名字是放菜单.但是打错字了.
JPanel bombPanel = new JPanel();//新建一个区域,雷区,由于雷是按钮,这里面应该都是按钮(JButton).
Bomb[][] bombButton; 2维组数,放地雷.
class Bomb extends JButton {
int num_x, num_y; // 第几号方块
int BombRoundCount; // 周围雷数
boolean isBomb; // 是否为雷
boolean isClicked; // 是否被点击
int BombFlag; // 探雷标记
boolean isRight; // 是否点击右键
public Bomb(int x, int y) {
num_x = x; //雷的位置 x,不解释
num_y = y; //雷的位置 y,不解释.获得是参数的值,所new Bomb的时候传入雷的位置,套嵌2个for循环.
BombFlag = 0; //是不是被插旗了
BombRoundCount = 9; //环绕数
isBomb = false; //是雷
isClicked = false; //被点
isRight = false; //是真的.( 以上都很好理解,直译^_^)
}
}
/* 计算方块周围雷数 */
public void CountRoundBomb() {
for (int i = 0; i (int) Math.sqrt(BlockNum); i++) { //开方 障碍数
for (int j = 0; j (int) Math.sqrt(BlockNum); j++) { //同上,我判断,设计的雷区是正方形,
//这里是找完所有的坐标.
int count = 0;
// 当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数
if (bombButton[i][j].isBomb != true) { //如果不是雷
for (int x = i - 1; x i + 2; x++) { //从左边1个,到右边1个,一共3个
for (int y = j - 1; y j + 2; y++) { //我不知道,java y坐标是上还是下,总之
//邻近的上中下.(这里会多找一个自己)
if ( (x = 0) (y = 0)
(x ( (int) Math.sqrt(BlockNum)))
(y ( (int) Math.sqrt(BlockNum)))) { //因边前面 x=i-1,所以排除超出边界
//的情况
if (bombButton[x][y].isBomb == true) { //如果是雷;
count++; //加一个
}
}
}
}
bombButton[i][j].BombRoundCount = count; //设置该Bomb环绕数的值
}
}
}
}
总之就是,建个一个Bomb类. 别外有一个方法统计那些不是雷的地方,的周围有几颗雷,到时候点开,显示出来.
分享文章:java扫雷代码问题分析,Java扫雷毕业论文
转载注明:http://lswzjz.com/article/hcppoo.html