2016-08-05 3 views
0

Итак, я пытаюсь создать своего рода игру «Колесо фортуны» или «Висельник». У меня есть 33 кнопки, которые представляют алфавит, 1 кнопка = 1 буква. Когда пользователь нажимает один, он должен «исчезать» (становится отключенным и невидимым). Я создал все кнопки в SceneBuilder, чтобы они были расположены в файле FXML.Создание кнопки «исчезает» при нажатии

Как я на самом деле это делаю? Я создал этот метод для первой кнопки. Но это не работает должным образом, независимо от того, какая кнопка я нажимаю, первая исчезает. Есть ли более простой способ сделать это с написанием 33 разных методов для каждой кнопки?

public void letterChosen (ActionEvent evt) { 
    b1.setDisable(true); 
    b1.setVisible(false); 
+0

Вместо b1 попробуйте метод getSource объекта ActionEvent. Это вернет источник события, который, мы надеемся, будет кнопкой, которую вы ищете – VortixDev

+0

Спасибо, он работает сейчас! – Felix

ответ

2

The Button что кликнули доступен как source в ActionEvent.

Кроме userData может быть присоединен к Button, в случае, если вы не можете получить информацию, необходимую для обработки нажатия кнопок от других свойств Button:

public void letterChosen(ActionEvent event) { 
    Button source = (Button) event.getSource(); 
    source.setVisible(false); 
    System.out.println("pick: "+source.getUserData()); 
} 

FXML

<Button onAction="#letterChosen" userData="a" text="A"/> 
<Button onAction="#letterChosen" userData="b" text="B"/> 

Обратите внимание, что нет необходимости отключать Node, который не показан, поскольку не удается связаться с Node, который не отображается. отключенный Button по умолчанию будет «потушен», но может также отображаться по-разному, например. используя CSS.