#java #javafx
#java #javafx
Вопрос:
Я новичок в JavaFX, и у меня возникла проблема. Я хочу, чтобы пользователь мог каждый раз окрашивать только две кнопки из кнопок 2X2, а кнопки 2X2 сбрасываются только после второго нажатия или когда пользователь решил нажать кнопку сброса, после чего он может выбрать еще 2 кнопки, но после нажатия на во-вторых, вторая кнопка не окрашивается, и все кнопки 2X2 были сброшены, только первая была окрашена.
public class ColorGame extends Application {
int onlyTwoSelection = 0;//allowing user to clicke 2 times
ArrayList<Integer> buttonId = new ArrayList<Integer>(); //Storing the last 2 button clicked Id
@Override
public void start(Stage primaryStage) throws Exception {
Button blankButton[] = new Button[4];//uncolored buttons
Button reset = new Button("Reset");//Reset all buttons to the first state
HBox hbox = new HBox();//Storing Reset
BorderPane borderPane = new BorderPane();
GridPane gridpane = new GridPane();
for (int i = 0; i < 4; i ) {//This for loop setting all Buttons
blankButton[i] = new Button();
blankButton[i].setMinSize(170, 110);
blankButton[i].setStyle(null);
}
reset.setOnAction(e -> {//Reset all buttons to the first state
for (int i = 0; i < 4; i ) {
blankButton[i].setStyle(null);
}
});
gridpane.add(blankButton[0], 0, 0);
gridpane.add(blankButton[1], 0, 1);
gridpane.add(blankButton[2], 1, 0);
gridpane.add(blankButton[3], 1, 1);
for(int i = 0; i < 4; i ) {//finding which buttons get clicked
final int buttonInd = i;
blankButton[i].setOnAction(e -> {
onlyTwoSelection ;
if((onlyTwoSelection<=2amp;amp;onlyTwoSelection>0)) {
buttonId.add(buttonInd);
blankButton[buttonInd].setStyle("-fx-BackGround-color: #ff0000");
if(onlyTwoSelection==2)
{
blankButton[buttonId.get(0)].setStyle(null);
blankButton[buttonId.get(1)].setStyle(null);
onlyTwoSelection=0;
buttonId.clear();
}
}
});
}
hbox.getChildren().addAll(reset);
hbox.setAlignment(Pos.CENTER);
gridpane.setAlignment(Pos.CENTER);
borderPane.setCenter(gridpane);
borderPane.setBottom(hbox);
Scene scene = new Scene(borderPane, 1000, 700);
primaryStage.setScene(scene);
primaryStage.setTitle("ColorGame");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
buttonId
Сохранение последних 2 кнопок.
onlyTwoSelection
это убедиться, что пользователь выбрал два.
reset
сбросьте кнопки 4X4.
buttonInd
последняя нажатая
кнопка последняя for
кнопка предназначена для определения того, на какую кнопку нажал пользователь.
…………..
Редактировать: я думаю, проблема в том, что этот код активируется до того, как пользователь сможет увидеть красный цвет, есть ли какой-нибудь способ остановить или отложить его активацию на секунду?
if(onlyTwoSelection==2)
{
blankButton[buttonId.get(0)].setStyle(null);
blankButton[buttonId.get(1)].setStyle(null);
onlyTwoSelection=0;
buttonId.clear();
}
Комментарии:
1. соглашения об именовании Java, пожалуйста
2. Я думаю, что я это исправлю
3. на самом деле нет, вы этого не сделали 😉 .. пожалуйста, проведите некоторое исследование, чтобы изучить соглашения об именовании java — вики-java tag есть ссылка afair. Если нет, просто введите термин в свое любимое поле поиска 🙂 Проблема здесь: имена полей должны начинаться со строчной буквы
4. Спасибо, по крайней мере, я узнаю что-то новое 🙂
5. хорошо 🙂 …….
Ответ №1:
for (int i = 0; i < 4; i ) {//finding which buttons get clicked
final int buttonInd = i;
blankButton[i].setOnAction(e -> {
if (onlyTwoSelection < 2) {
blankButton[buttonInd].setStyle("-fx-BackGround-color: #ff0000");
onlyTwoSelection ;
} else {
onlyTwoSelection = 0;
reset.fire();
blankButton[buttonInd].setStyle("-fx-BackGround-color: #ff0000");
onlyTwoSelection ;
}
});
}
Вот логика.
Комментарии:
1. да, это сработало, но я должен нажать на третий бутон, и я обнаружил, что последнее
if
утверждение является корнем проблемы, поэтому, если я смогу отложить его на секунду, прежде чем он будет активирован, мой код должен работать так, как задумано2. @Mrkhaled, если это решило вашу проблему, выберите ее как правильный ответ. Если после решения этой проблемы у вас возникла новая проблема, найдите время, чтобы попытаться разобраться в ней самостоятельно. Если у вас по-прежнему возникают проблемы после того, как вы потратили некоторое время, чтобы разобраться, вернитесь и задайте новый вопрос. Движущиеся вопросы несправедливы по отношению к человеку, который ответил на ваш первоначальный вопрос.