2016-04-09 3 views
2

У меня возникли проблемы с моим кодом. Мне пришлось сделать шахматную доску для предыдущей проблемы. Теперь я должен использовать тот же код для отображения сеток 8X8, которые изначально белые. После нажатия они должны, они должны изменить цвет случайным образом. Может кто-то, пожалуйста, помогите, вот копия моего кода.JavaFX: Когда пользователь нажимает кнопку мыши на панели, ее цвет следует менять случайным образом?

import javafx.application.Application; 
import javafx.geometry.HPos; 
import javafx.geometry.VPos; 
import javafx.scene.Scene; 
import javafx.scene.control.Control; 
import javafx.scene.layout.ColumnConstraints; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.RowConstraints; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 
import javafx.scene.layout.Pane; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.shape.Rectangle; 
import javafx.event.EventHandler; 
import javafx.scene.paint.Paint; 
import javafx.scene.paint.Color; 

public class ChessBoardColor extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     GridPane pane = new GridPane(); 
     int size = 8 ; 

     for (int row = 0; row < size; row++) { 

      for (int color = 0; color < size; color ++) { 


       StackPane panel = new StackPane(); 
       String boxcolor ; 
       if ((row + color) % 2 == 0) { 
        boxcolor = "red"; 
       } else { 
        boxcolor = "black"; 
       } 
       panel.setStyle("-fx-background-color:#FFFFFF;"); 
       pane.add(panel, color, row); 



       pane.setOnMouseClicked(e -> { 
       pane.setStroke(); 
       }); 
       } 

      } 
     } 



     for (int i = 0; i < size; i++) { 
      pane.getColumnConstraints().add(new ColumnConstraints(5, Control.USE_COMPUTED_SIZE, Double.POSITIVE_INFINITY, Priority.ALWAYS, HPos.CENTER, true)); 
      pane.getRowConstraints().add(new RowConstraints(5, Control.USE_COMPUTED_SIZE, Double.POSITIVE_INFINITY, Priority.ALWAYS, VPos.CENTER, true)); 
     } 

     primaryStage.setScene(new Scene(pane, 500, 500)); 
     primaryStage.show(); 


    public static void main(String[] args) { 
     launch(args); 
    } 
} 

ответ

0

посмотреть на этот код просто найти узел, в котором пользователь нажимает и применить стиль, как вы знаете:

public class ChessBoardColor extends Application { 

@Override 
public void start(Stage primaryStage) { 
    GridPane pane = new GridPane(); 
    int size = 8; 
    for (int row = 0; row < size; row++) { 

     for (int color = 0; color < size; color++) { 

      StackPane panel = new StackPane(); 
      String boxcolor; //initial box color = "white" if you want it white initialy 

      if ((row + color) % 2 == 0) {//I suppose it's your chessboard color 
       boxcolor = "red"; 
      } else { 
       boxcolor = "black"; 

      } 
      panel.setStyle("-fx-background-color:" + boxcolor + ";"); 
      pane.add(panel, color, row); 

      pane.setOnMouseClicked(e -> { 

       Node target = (Node) e.getTarget(); // you find where the user click 
       if (target instanceof StackPane) { 

        String radomColor = getRandomColor(); // choose a random color 
        ((StackPane) target).setStyle("-fx-background-color:" + radomColor + ";"); // apply it like you already know 
       } 

      }); 
     } 

    } 

    for (int i = 0; i < size; i++) { 
     pane.getColumnConstraints().add(new ColumnConstraints(5, Control.USE_COMPUTED_SIZE, 
       Double.POSITIVE_INFINITY, Priority.ALWAYS, HPos.CENTER, true)); 
     pane.getRowConstraints().add(new RowConstraints(5, Control.USE_COMPUTED_SIZE, Double.POSITIVE_INFINITY, 
       Priority.ALWAYS, VPos.CENTER, true)); 
    } 

    primaryStage.setScene(new Scene(pane, 500, 500)); 
    primaryStage.show(); 

} 

private String getRandomColor() { // simple random color generator 

    String colors[] = new String[] {"blue", "yellow", "green", "purple"}; 
    Random ran = new Random(); 
    int randomColourIndex = ran.nextInt(4);  
    return colors[randomColourIndex]; 
} 

public static void main(String[] args) { 
    launch(args); 
} 
} 
Смежные вопросы