嘿傢伙這裏的交易我想用java創建一個簡單的國際象棋遊戲。我有一個JButton [8] [8]陣列的板子。我爲每個新的SquareListener分配一個擴展BoardListner的類,它是一個實現Action Listener的超類。我想記錄當前正在按下的按鈕是否等於按下的最後一個按鈕。我存儲在超類中按下的JButton實例,並在SqaureListener actionPerformed方法中引用該實例。這裏是我爲按鈕創建的類的示例。記錄在JButtons網格中按下的最後一個JButton
public class SquareListener extends BoardListener {
private int row;
private int column;
public SquareListener(int row, int column){
this.setRow(row);
this.setColumn(column);
}
@Override
public void actionPerformed(ActionEvent ae){
JButton buttonPressed = (JButton) ae.getSource();
if(buttonPressed == super.lastButtonPressed){
System.out.println("This is the button you last pressed");
}else{
System.out.println("This is a new button");
}
super.lastButtonPressed = buttonPressed;
}
,這裏是我在哪裏存儲isSelecting數據
超類public class BoardListener implements ActionListener {
private boolean isSelectingInsteadOfTargeting = true;
JButton lastButtonPressed = new JButton();
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
public boolean isSelectingInsteadOfTargeting() {
return isSelectingInsteadOfTargeting;
}
public void setSelectingInsteadOfTargeting(boolean isSelectingInsteadOfTargeting) {
this.isSelectingInsteadOfTargeting = isSelectingInsteadOfTargeting;
}
}
我希望每一個按鈕按下時有一個按鈕傳入的實例時間buttonPressed和比較BoardListener中存儲了什麼,然後打印出來然後將buttonPressed分配給超級成員。相反,我得到的行爲是,如果我按下按鈕一次,它總是會返回「這是您最後按下的按鈕」,即使我之間按下了一個新按鈕。我正在做這件事的方式有什麼問題嗎?有沒有更簡單的方法?
這裏是我保存按鈕,並指定他們的動作偵聽
public Board(boolean _isWhite){
gui = new JPanel(new GridLayout(8,8));
chessBoardSquares = new Square[8][8];
boolean shouldBeWhite = true;
for(int i = 0; i < 8; i++){
for(int j= 0; j < 8; j++){
Square square = new Square(i,j);
square.getButton().addActionListener(new SquareListener(i,j));
if(shouldBeWhite){
square.getButton().setBackground(Color.WHITE);
shouldBeWhite = false;
}else{
square.getButton().setBackground(Color.BLACK);
shouldBeWhite = true;
}
if (j == 7){
shouldBeWhite = !shouldBeWhite;
}
chessBoardSquares[i][j] = square;
gui.add(chessBoardSquares[i][j].getButton());
}
}
BoardFactory boardFactory = new BoardFactory();
if(_isWhite){
updateBoardIconsBasedOnCurrentBoardArray(boardFactory.getBlackStartArray());
}else{
//getblack start array and invoke method to change button icons based on array
}
}
您可以添加將註冊聽衆註冊到您的按鈕的代碼。我懷疑你每個按鈕都有64個不同的監聽器。在這種情況下,我認爲應該有一個Board類,它可以將最近和以前的按鈕點擊作爲一個靜態變量。 – emeraldjava
剛剛添加它,讓我知道你的想法我顯然有一些其他的補充課,但你可以從這 –