gpt4 book ai didi

java - 检查 java swing GUI 中的一系列点击

转载 作者:行者123 更新时间:2023-11-29 04:02:50 25 4
gpt4 key购买 nike

我正在为国际象棋游戏开发 GUI,我想知道是否有任何方法可以检查一系列点击,例如:用户点击 jPanel,然后用户点击另一个存在于有效移动数组中的 jPanel。我知道我可以使用变量来存储某种状态,例如“isSquareClicked = true”或其他东西,但我宁愿不这样做,除非那是唯一的方法...

最佳答案

我没有发现使用 JPanel 有任何问题。这是我的实现:

首先是一个 ChessSquare,它代表棋盘上的一个单元格:

public class ChessSquare extends JPanel{
int x,y;

public ChessSquare(int x, int y){
super();
this.setPreferredSize(new Dimension(50,50));
this.setBorder(BorderFactory.createLineBorder(Color.black));
this.x = x;
this.y = y;
}
}

现在是主板面板:

public class ChessPanel extends JPanel{
JPanel positions[][] = new JPanel[8][8];
ChessSquare move[] = new ChessSquare[2];

public ChessPanel(){
initComponents();
}

private void initComponents(){
setLayout(new GridLayout(8,8));

for(int i=0;i<positions.length;i++){
for(int j=0;j<positions[i].length;j++){
ChessSquare square = new ChessSquare(i,j);
square.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent me) {
ChessSquare cs = (ChessSquare)me.getComponent();
if(isValidMove(cs)){

System.out.println("Valid move!");
System.out.println("x1: "+move[0].x+" y1: "+move[0].y);
System.out.println("x2: "+move[1].x+" y2: "+move[1].y);
System.out.println("");

resetMove();
}
}

//Other mouse events

});
positions[i][j] = square;
add(square);
}
}
}

private boolean isValidMove(ChessSquare square){
//here you would check if the move is valid.
if(move[0] == null){
move[0] = square;
return false; //first click
}else{
move[1] = square;
}

//Other chess rules go here...
return true;
}

private void resetMove(){
move = new ChessSquare[2];
}
}

我们保留一个 JPanel 矩阵来表示棋盘,并使用 ChessSquare 数组来表示当前的着法。在 isValidMove() 中,我们检查当前移动是否完成(两个方 block 都已被点击,因此移动数组已经有一个元素)。移动完成后,我们会重置移动并重新开始。

关于java - 检查 java swing GUI 中的一系列点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com