我有一个JButton
数组,当它加载时会显示在窗口上。
出于某种原因,当窗口加载时,第一个按钮似乎已被选中,因此我的程序进入无限循环。
我知道要停止这个无限循环,我应该改变while(true)
循环中的条件,但不确定要放入什么条件。
所以我认为另一种方法是弄清楚为什么其中一个按钮已被选中。
actionPerformed
方法 - 这将获取所选按钮的名称,我将其作为表示坐标的字符串。然后它将坐标转换为整数,这些整数可以由HumanPlayer类使用getXInt和getYInt方法获得。董事会和部分已经在其他类中设置,我知道这一切都有效,因为我已经创建了一个文本版本,现在这是我正在处理的GUI版本。
这只是一个允许用户选择一个按钮而没有while(true)循环卡住的情况。
屏幕类:
public void actionPerformed(ActionEvent e) {
JButton piece = (JButton) e.getSource();
String xy = piece.getName();
String x = xy.substring(0,1);
String y = xy.substring(2,3);
xInt = Integer.parseInt(x);
yInt = Integer.parseInt(y);
}
public int getXInt() {
return xInt;
}
public int getYInt() {
return yInt;
}
HumanPlayer类,它获取所选作品的信息并检查是否可以移动。
//Sets up new instance of Screen class which is where the window displaying the buttons is set up (this contains the getXInt and getYInt methods are- so the HumanPlayer class can retrieve the piece which has been selected.
Screen s = new Screen(board);
public boolean makeMove() {
int fromXCo , fromYCo, toXCo, toYCo;
Piece p;
ArrayList<Move> moves = null;
while (true){
//reads x and y co-ordinate
System.out.println("Click on a piece to move");
//takes information from which button is clicked from other class
fromXCo = s.getXInt();
fromYCo = s.getYInt();
p = board.getPiece(fromXCo, fromYCo);
System.out.println("Your selected piece is " + p.getChar());
//looks through available moves for piece
moves = p.availableMoves();
//if no moves available, asks for new co-ordinates.
if (moves == null)
{
System.out.println("No moves available for this piece \n");
continue;
}
break;
}
所以输出是连续的: