/* * Copyright 2012, 2013 Evan Flynn * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.foobar.minesweeper; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.geometry.Insets; import javafx.scene.Cursor; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane.ScrollBarPolicy; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.stage.Stage; import org.foobar.minesweeper.model.Minefield; /** * The application class for JavaFX Minesweeper * */ public class Minesweeper extends Application { private final Pane canvas = new Pane(); private final ScrollPane sPane = new ScrollPane(); private boolean spawnMode; public Minesweeper() { } @Override public void start(Stage stage) { Button button = new Button("New Minesweeper"); button.setOnAction(this::onNewMinesweeper); sPane.setOnMouseClicked(this::onPaneClicked); HBox box = new HBox(); box.setPadding(new Insets(15, 12, 15, 12)); box.setStyle("-fx-background-color: #336699;"); box.getChildren().add(button); BorderPane bpane = new BorderPane(); sPane.setContent(canvas); sPane.setVbarPolicy(ScrollBarPolicy.NEVER); sPane.setHbarPolicy(ScrollBarPolicy.NEVER); bpane.setTop(box); bpane.setCenter(sPane); stage.setTitle("JavaFX Minesweeper"); stage.setScene(new Scene(bpane, 600, 600)); stage.show(); } private void onPaneClicked(MouseEvent event) { if (!spawnMode) return; Minefield minefield = new Minefield(10, 10, 10); MinesweeperPane minesweeper = new MinesweeperPane(minefield, this); minesweeper.asParent().relocate(event.getX(), event.getY()); minesweeper.asParent().requestFocus(); canvas.getChildren().add(minesweeper.asParent()); spawnMode = false; sPane.setCursor(Cursor.DEFAULT); } public void onClone(MinesweeperPane original) { double x = original.asParent().getLayoutX(); double y = original.asParent().getLayoutY(); MinesweeperPane cloned = new MinesweeperPane(original); cloned.asParent().setLayoutX(x + 20); cloned.asParent().setLayoutY(y + 20); canvas.getChildren().add(cloned.asParent()); } public void onClose(MinesweeperPane toClose) { canvas.getChildren().remove(toClose.asParent()); } private void onNewMinesweeper(ActionEvent event) { spawnMode = true; sPane.setCursor(Cursor.CROSSHAIR); } }