2017-07-02 20 views
0

我有一個GridPane(JavaFX中):禁用一個GridPane填充的ToggleButtons這樣一些的ToggleButtons基於哪個切換按鈕被選擇

int grootte = 4; 

ToggleButton letter[][] = new ToggleButton[grootte][grootte]; 

for (int i = 0; i < grootte; i++){ 
     for (int j = 0; j < grootte; j++){ 
      final int x = i; 
      final int y = j; 
      letter[x][y] = new ToggleButton(letters.get("a")); 
      letter[x][y].setId(x + "" + y); 
      letter[x][y].setMinSize(50, 50); 
      gp.add(letter[x][j], i, j); 
      letter[x][y].setOnAction(e -> btnPress(letter[x][y])); 
     } 
    } 
} 

的btnPress方法是這樣的:

public void btnPress(ToggleButton letter){ 
    System.out.println(letter.getId()); 
    if (letter.isSelected()){ 
     woord.appendText(letter.getText()); 
    } 
} 

所以,我有一個填充4x4 ToggleButtons的GridPane,顯示「a」。

我想要做的就是讓它在我選擇ToggleButton的時候,只能選擇下一個ToggleButton,如果它緊鄰水平,垂直和對角線。

我已經通過給每個按鈕分配一個ID來獲得按鈕的位置,但我不知道該從哪裏去。

+1

添加一個監聽器到按鈕,並取決於按下什麼做一定的動作 – ZeldaZach

回答

0

你可以這樣做:

letter[x][y].selectedProperty().addListener((obs, wasSelected, isNowSelected) -> { 
    if (isNowSelected) { 
     updateToggleButtonStates(letter, x, y); 
    } else { 
     // not sure if you want to do something when buttons are deselected? 
    } 
}); 

private void updateToggleButtonStates(ToggleButton[][] buttons, int x, int y) { 
    for (int i = 0 ; i < buttons.length ; i++) { 
     for (int j = 0 ; j < buttons[i].length ; j++) { 
      buttons[i][j].setDisable(Math.abs(i-x) > 1 || Math.abs(j-y) > 1); 
     } 
    } 
} 

(所以按鈕不在相鄰列或同一列,或不相鄰的行或相同的行,將被禁用;其餘按鈕將被啓用。)

+0

這正是我需要的!非常感謝你! – Wouter

相關問題