Search in sources :

Example 6 with EventHandler

use of javafx.event.EventHandler in project Gargoyle by callakrsos.

the class LettersPane method createRandomTimeLine.

private Timeline createRandomTimeLine(Node node) {
    // over 3 seconds move letter to random position and fade it out
    final Timeline timeline = new Timeline();
    timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(3), new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            // we are done remove us from scene
            getChildren().remove(node);
        }
    }, new KeyValue(node.translateXProperty(), getRandom(0.0f, getWidth() - node.getBoundsInLocal().getWidth()), INTERPOLATOR), new KeyValue(node.translateYProperty(), getRandom(0.0f, getHeight() - node.getBoundsInLocal().getHeight()), INTERPOLATOR), new KeyValue(node.opacityProperty(), 0f)));
    return timeline;
}
Also used : Timeline(javafx.animation.Timeline) KeyValue(javafx.animation.KeyValue) ActionEvent(javafx.event.ActionEvent) KeyFrame(javafx.animation.KeyFrame) EventHandler(javafx.event.EventHandler)

Example 7 with EventHandler

use of javafx.event.EventHandler in project Gargoyle by callakrsos.

the class LettersPane method createUpperTimeLine.

//	private Timeline createCurveTimeLine(Node node) {
//		// over 3 seconds move letter to random position and fade it out
//		final Timeline timeline = new Timeline();
//		timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(3), new EventHandler<ActionEvent>() {
//			@Override
//			public void handle(ActionEvent event) {
//				// we are done remove us from scene
//				getChildren().remove(node);
//			}
//		}, new KeyValue(node.translateXProperty(), node.translateXProperty().get(), INTERPOLATOR),
//			new KeyValue(node.translateYProperty(), 100f, INTERPOLATOR), new KeyValue(node.opacityProperty(), 0f)));
//
//		new KeyFrame(Duration.millis(0.5), new KeyFrame(time, values))
//
//
//
//		return timeline;
//
//
//	}
private Timeline createUpperTimeLine(Node node) {
    // over 3 seconds move letter to random position and fade it out
    final Timeline timeline = new Timeline();
    timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(3), new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            // we are done remove us from scene
            getChildren().remove(node);
        }
    }, new KeyValue(node.translateXProperty(), node.translateXProperty().get(), INTERPOLATOR), new KeyValue(node.translateYProperty(), 100f, INTERPOLATOR), new KeyValue(node.opacityProperty(), 0f)));
    return timeline;
}
Also used : Timeline(javafx.animation.Timeline) KeyValue(javafx.animation.KeyValue) ActionEvent(javafx.event.ActionEvent) KeyFrame(javafx.animation.KeyFrame) EventHandler(javafx.event.EventHandler)

Example 8 with EventHandler

use of javafx.event.EventHandler in project Gargoyle by callakrsos.

the class CrudBaseGridView method saveBtnClickHandler.

/**
	 * 저장버튼 클릭 핸들러
	 *
	 * @param saveClickCallbackProperty2
	 *
	 * @Date 2015. 10. 10.
	 * @return
	 * @User KYJ
	 */
private EventHandler<MouseEvent> saveBtnClickHandler(ObjectProperty<Consumer<List<T>>> saveClickCallbackProperty) {
    return new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {
            try {
                Consumer<List<T>> callback = saveClickCallbackProperty.get();
                if (callback == null) {
                    errorMsgCallback.accept("saveClickCallback 함수에 에러메세지 콜백을 등록하세요.");
                    return;
                }
                gridview.fireEvent(event);
                List<T> items = getItems();
                //필수값 검증로직 추가. 2016.12.08
                AbstractVoNullChecker<T> nullCheckHandler = new DefaultVoNullChecker<>(CrudBaseGridView.this);
                nullCheckHandler.setList(items);
                Optional<Field> findFirst = nullCheckHandler.findFirst();
                boolean present = findFirst.isPresent();
                if (present) {
                    String msgFieldName = nullCheckHandler.getMsgNameByfield();
                    //						String message = ValueUtil.getMessage("MSG_W_000001", msgFieldName);
                    int emptyIndex = nullCheckHandler.getEmptyIndex();
                    Set<Node> findAllByNodes = CrudBaseGridView.this.lookupAll("TableRow");
                    findAllByNodes.stream().map(n -> (TableRow) n).filter(r -> {
                        return emptyIndex == r.getIndex();
                    }).findFirst().ifPresent(n -> {
                        Timeline timeline = new Timeline();
                        timeline.setCycleCount(10);
                        timeline.setAutoReverse(true);
                        KeyFrame keyFrame = new KeyFrame(Duration.millis(500), new KeyValue(n.styleProperty(), "-fx-border-color : red ; -fx-border-width : 1px"));
                        KeyFrame keyFrame2 = new KeyFrame(Duration.millis(500), new KeyValue(n.styleProperty(), ""));
                        KeyValue keyValueX = new KeyValue(n.styleProperty(), "-fx-border-color : red ; -fx-border-width : 1px");
                        KeyValue keyValueY = new KeyValue(n.styleProperty(), "");
                        KeyFrame keyFrame3 = new KeyFrame(Duration.seconds(2), "", keyValueX, keyValueY);
                        timeline.getKeyFrames().add(keyFrame3);
                        timeline.play();
                    });
                    getSelectionModel().select(emptyIndex);
                    //						DialogUtil.showMessageDialog(SharedMemory.getPrimaryStage(), msgFieldName + " Field is empty.");
                    return;
                }
                List<T> arrayList = new ArrayList<T>(items);
                arrayList.addAll(deleteItems);
                callback.accept(arrayList);
                // 사용자 정의 로직이 이상없으면 deleteItems 항목도 비운다.
                deleteItems.clear();
            } catch (Exception e) {
                throw e;
            }
        }
    };
}
Also used : EventHandler(javafx.event.EventHandler) Button(javafx.scene.control.Button) Pos(javafx.geometry.Pos) MouseEvent(javafx.scene.input.MouseEvent) LoggerFactory(org.slf4j.LoggerFactory) FXCollections(javafx.collections.FXCollections) DialogUtil(com.kyj.fx.voeditor.visual.util.DialogUtil) ArrayList(java.util.ArrayList) TableColumn(javafx.scene.control.TableColumn) Insets(javafx.geometry.Insets) KeyValue(javafx.animation.KeyValue) HBox(javafx.scene.layout.HBox) KeyFrame(javafx.animation.KeyFrame) ObjectProperty(javafx.beans.property.ObjectProperty) Logger(org.slf4j.Logger) Node(javafx.scene.Node) TableRow(javafx.scene.control.TableRow) Set(java.util.Set) Timeline(javafx.animation.Timeline) Field(java.lang.reflect.Field) Objects(java.util.Objects) Consumer(java.util.function.Consumer) List(java.util.List) ActionEvent(javafx.event.ActionEvent) Duration(javafx.util.Duration) SimpleObjectProperty(javafx.beans.property.SimpleObjectProperty) Optional(java.util.Optional) ObservableList(javafx.collections.ObservableList) BorderPane(javafx.scene.layout.BorderPane) TableViewSelectionModel(javafx.scene.control.TableView.TableViewSelectionModel) SharedMemory(com.kyj.fx.voeditor.visual.momory.SharedMemory) MouseEvent(javafx.scene.input.MouseEvent) KeyValue(javafx.animation.KeyValue) Node(javafx.scene.Node) ArrayList(java.util.ArrayList) EventHandler(javafx.event.EventHandler) Field(java.lang.reflect.Field) Timeline(javafx.animation.Timeline) TableRow(javafx.scene.control.TableRow) KeyFrame(javafx.animation.KeyFrame) ArrayList(java.util.ArrayList) List(java.util.List) ObservableList(javafx.collections.ObservableList)

Example 9 with EventHandler

use of javafx.event.EventHandler in project Gargoyle by callakrsos.

the class DockTabPaneSkin method removeTabs.

private void removeTabs(List<? extends DockTab> removedList) {
    for (final DockTab tab : removedList) {
        stopCurrentAnimation(tab);
        // Animate the tab removal
        final TabHeaderSkin tabRegion = tabHeaderArea.getTabHeaderSkin(tab);
        if (tabRegion != null) {
            tabRegion.isClosing = true;
            tabRegion.removeListeners(tab);
            removeTabContent(tab);
            // remove the menu item from the popup menu
            ContextMenu popupMenu = tabHeaderArea.controlButtons.popup;
            TabMenuItem tabItem = null;
            if (popupMenu != null) {
                for (MenuItem item : popupMenu.getItems()) {
                    tabItem = (TabMenuItem) item;
                    if (tab == tabItem.getTab()) {
                        break;
                    }
                    tabItem = null;
                }
            }
            if (tabItem != null) {
                tabItem.dispose();
                popupMenu.getItems().remove(tabItem);
            }
            // end of removing menu item
            EventHandler<ActionEvent> cleanup = ae -> {
                tabRegion.animationState = TabAnimationState.NONE;
                tabHeaderArea.removeTab(tab);
                tabHeaderArea.requestLayout();
                if (getSkinnable().getTabs().isEmpty()) {
                    tabHeaderArea.setVisible(false);
                }
            };
            if (closeTabAnimation.get() == TabAnimation.GROW) {
                tabRegion.animationState = TabAnimationState.HIDING;
                Timeline closedTabTimeline = tabRegion.currentAnimation = createTimeline(tabRegion, Duration.millis(ANIMATION_SPEED), 0.0F, cleanup);
                closedTabTimeline.play();
            } else {
                cleanup.handle(null);
            }
        }
    }
}
Also used : EventHandler(javafx.event.EventHandler) Button(javafx.scene.control.Button) HPos(javafx.geometry.HPos) Pos(javafx.geometry.Pos) PseudoClass(javafx.css.PseudoClass) Rotate(javafx.scene.transform.Rotate) EnumConverter(com.sun.javafx.css.converters.EnumConverter) LoggerFactory(org.slf4j.LoggerFactory) StackPane(javafx.scene.layout.StackPane) Side(javafx.geometry.Side) InvalidationListener(javafx.beans.InvalidationListener) TabPane(javafx.scene.control.TabPane) ListChangeListener(javafx.collections.ListChangeListener) ContextMenu(javafx.scene.control.ContextMenu) BehaviorSkinBase(com.sun.javafx.scene.control.skin.BehaviorSkinBase) ControlResources.getString(com.sun.javafx.scene.control.skin.resources.ControlResources.getString) DockPos(com.kyj.fx.voeditor.visual.component.dock.pane.DockPos) DockPane(com.kyj.fx.voeditor.visual.component.dock.pane.DockPane) Point2D(javafx.geometry.Point2D) Pane(javafx.scene.layout.Pane) MultiplePropertyChangeListenerHandler(com.sun.javafx.scene.control.MultiplePropertyChangeListenerHandler) MenuItem(javafx.scene.control.MenuItem) AccessibleAttribute(javafx.scene.AccessibleAttribute) SingleSelectionModel(javafx.scene.control.SingleSelectionModel) DockEvent(com.kyj.fx.voeditor.visual.component.dock.pane.DockEvent) CssMetaData(javafx.css.CssMetaData) Timeline(javafx.animation.Timeline) Rectangle(javafx.scene.shape.Rectangle) TraversalEngine(com.sun.javafx.scene.traversal.TraversalEngine) Observable(javafx.beans.Observable) FxUtil(com.kyj.fx.voeditor.visual.util.FxUtil) WeakInvalidationListener(javafx.beans.WeakInvalidationListener) List(java.util.List) Duration(javafx.util.Duration) Region(javafx.scene.layout.Region) Interpolator(javafx.animation.Interpolator) WeakListChangeListener(javafx.collections.WeakListChangeListener) SimpleDoubleProperty(javafx.beans.property.SimpleDoubleProperty) ObservableList(javafx.collections.ObservableList) AccessibleRole(javafx.scene.AccessibleRole) Styleable(javafx.css.Styleable) Bounds(javafx.geometry.Bounds) SkinBase(javafx.scene.control.SkinBase) RadioMenuItem(javafx.scene.control.RadioMenuItem) MouseButton(javafx.scene.input.MouseButton) MouseEvent(javafx.scene.input.MouseEvent) FXCollections(javafx.collections.FXCollections) DoubleProperty(javafx.beans.property.DoubleProperty) DockNode(com.kyj.fx.voeditor.visual.component.dock.pane.DockNode) SwipeEvent(javafx.scene.input.SwipeEvent) ArrayList(java.util.ArrayList) TabClosingPolicy(javafx.scene.control.TabPane.TabClosingPolicy) VPos(javafx.geometry.VPos) AccessibleAction(javafx.scene.AccessibleAction) Direction(com.sun.javafx.scene.traversal.Direction) StyleableProperty(javafx.css.StyleableProperty) KeyValue(javafx.animation.KeyValue) Animation(javafx.animation.Animation) Tooltip(javafx.scene.control.Tooltip) Color(javafx.scene.paint.Color) KeyFrame(javafx.animation.KeyFrame) ObjectProperty(javafx.beans.property.ObjectProperty) Logger(org.slf4j.Logger) Label(javafx.scene.control.Label) Iterator(java.util.Iterator) Node(javafx.scene.Node) ScrollEvent(javafx.scene.input.ScrollEvent) DropShadow(javafx.scene.effect.DropShadow) ContextMenuEvent(javafx.scene.input.ContextMenuEvent) Popup(javafx.stage.Popup) ActionEvent(javafx.event.ActionEvent) ToggleGroup(javafx.scene.control.ToggleGroup) StyleableObjectProperty(javafx.css.StyleableObjectProperty) Utils(com.sun.javafx.util.Utils) ImageView(javafx.scene.image.ImageView) WritableValue(javafx.beans.value.WritableValue) Collections(java.util.Collections) SharedMemory(com.kyj.fx.voeditor.visual.momory.SharedMemory) Timeline(javafx.animation.Timeline) ActionEvent(javafx.event.ActionEvent) ContextMenu(javafx.scene.control.ContextMenu) MenuItem(javafx.scene.control.MenuItem) RadioMenuItem(javafx.scene.control.RadioMenuItem)

Example 10 with EventHandler

use of javafx.event.EventHandler in project Minesweeper3D by SethDamiani.

the class Main method start.

@Override
public void start(Stage primaryStage) throws Exception {
    // Main JavaFX method
    // Add all sides into the cube group
    cube.getChildren().addAll(sideA, sideB, sideC, sideD, sideE, sideF);
    // Set proper layout
    cube.setLayoutX(150);
    cube.setLayoutY(190);
    // Create the main cube object
    createCube(cube, gX, gY, game, primaryStage);
    // Properly nest cube rotation control groups
    gameRoot.getChildren().add(gY);
    //       ||
    gY.getChildren().add(gX);
    //       ||
    gX.getChildren().add(cube);
    stopwatch.setFont(new Font(45));
    bombs.setFont(new Font(45));
    gameRoot.getChildren().addAll(stopwatch, bombs);
    timeTask = new Timeline(new // Task to keep track of time
    KeyFrame(// Task to keep track of time
    Duration.seconds(1), // Task to keep track of time
    event -> {
        time++;
        stopwatch.setText("Time: " + String.valueOf(time));
    }));
    // Make timeTask run forever and ever
    timeTask.setCycleCount(Timeline.INDEFINITE);
    for (int x = 0; x < Grid.length; x++) {
        // Add the cells to their proper side groups
        for (int y = 0; y < Grid[x].length; y++) {
            for (int z = 0; z < Grid[x][y].length; z++) {
                Grid[x][y][z] = new Cell(cube, 40, 40 * y, 40 * z, x);
                switch(x) {
                    case 0:
                        sideA.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 1:
                        sideB.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 2:
                        sideC.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 3:
                        sideD.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 4:
                        sideE.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 5:
                        sideF.getChildren().add(Grid[x][y][z].cell);
                        break;
                }
            }
        }
    }
    // Place bombs randomly
    placeBombs(100);
    // Place the correct numbers according to the new bomb positions
    placeNumbers();
    // -------------------------------------------------------------------------------
    // Confirm Exit screen setup
    // new Color(1,1,1,.5)
    Text confirmExitText = new Text("Quit");
    confirmExitText.setFill(Color.WHITE);
    confirmExitText.setFont(Font.font(80));
    confirmExitText.setX(400 - confirmExitText.getLayoutBounds().getWidth() / 2);
    confirmExitText.setY(200);
    Text confirmExitSubText = new Text("Are you sure you would like to quit to the main menu?\nAll progress will be lost.");
    confirmExitSubText.setFill(Color.WHITE);
    confirmExitSubText.setFont(Font.font(20));
    confirmExitSubText.setTextAlignment(TextAlignment.CENTER);
    confirmExitSubText.setX(400 - confirmExitSubText.getLayoutBounds().getWidth() / 2);
    confirmExitSubText.setY(300);
    Text confirmExitYesText = new Text("Yes");
    confirmExitYesText.setFont(Font.font(30));
    confirmExitYesText.setFill(Color.WHITE);
    confirmExitYesText.setX(300 - confirmExitYesText.getLayoutBounds().getWidth() / 2);
    confirmExitYesText.setY(500);
    Rectangle confirmExitYesButton = new Rectangle(confirmExitYesText.getBoundsInLocal().getMinX() - 20, confirmExitYesText.getBoundsInLocal().getMinY() - 20, confirmExitYesText.getLayoutBounds().getWidth() + 40, confirmExitYesText.getLayoutBounds().getHeight() + 40);
    confirmExitYesButton.setFill(Color.TRANSPARENT);
    confirmExitYesButton.setStroke(Color.WHITE);
    confirmExitYesButton.setStrokeWidth(10);
    confirmExitYesButton.setOnMouseEntered(event -> confirmExitYesButton.setFill(new Color(1, 1, 1, .5)));
    confirmExitYesButton.setOnMouseExited(event -> confirmExitYesButton.setFill(Color.TRANSPARENT));
    confirmExitYesText.setOnMouseEntered(event -> confirmExitYesButton.setFill(new Color(1, 1, 1, .5)));
    confirmExitYesText.setOnMouseExited(event -> confirmExitYesButton.setFill(Color.TRANSPARENT));
    confirmExitYesButton.setOnMouseClicked(event -> primaryStage.setScene(menu));
    confirmExitYesText.setOnMouseClicked(event -> primaryStage.setScene(menu));
    Text confirmExitNoText = new Text("No");
    confirmExitNoText.setFont(Font.font(30));
    confirmExitNoText.setFill(Color.WHITE);
    confirmExitNoText.setX(500 - confirmExitYesText.getLayoutBounds().getWidth() / 2);
    confirmExitNoText.setY(500);
    Rectangle confirmExitNoButton = new Rectangle(confirmExitNoText.getBoundsInLocal().getMinX() - 20, confirmExitNoText.getBoundsInLocal().getMinY() - 20, confirmExitNoText.getLayoutBounds().getWidth() + 40, confirmExitNoText.getLayoutBounds().getHeight() + 40);
    confirmExitNoButton.setFill(Color.TRANSPARENT);
    confirmExitNoButton.setStroke(Color.WHITE);
    confirmExitNoButton.setStrokeWidth(10);
    confirmExitNoButton.setOnMouseEntered(event -> confirmExitNoButton.setFill(new Color(1, 1, 1, .5)));
    confirmExitNoButton.setOnMouseExited(event -> confirmExitNoButton.setFill(Color.TRANSPARENT));
    confirmExitNoText.setOnMouseEntered(event -> confirmExitNoButton.setFill(new Color(1, 1, 1, .5)));
    confirmExitNoText.setOnMouseExited(event -> confirmExitNoButton.setFill(Color.TRANSPARENT));
    confirmExitNoButton.setOnMouseClicked(event -> {
        timeTask.play();
        primaryStage.setScene(game);
    });
    confirmExitNoText.setOnMouseClicked(event -> {
        timeTask.play();
        primaryStage.setScene(game);
    });
    confirmExitRoot.getChildren().addAll(confirmExitText, confirmExitSubText, confirmExitYesText, confirmExitNoText, confirmExitYesButton, confirmExitNoButton);
    // Quit screen UI setup
    // Initialize and configure background
    Rectangle quitBox = new Rectangle(800, 700, Color.INDIANRED);
    // Initialize and configure the title
    Text quitText = new Text(260, 200, "Game Over");
    quitText.setFont(new Font(80));
    quitText.setStroke(Color.WHITE);
    quitText.setFill(Color.WHITE);
    quitText.setTextAlignment(TextAlignment.CENTER);
    quitText.setX(400 - quitText.getLayoutBounds().getWidth() / 2);
    // Initialize and configure the time text
    Text endScoreText = new Text(260, 320, "Time: ");
    endScoreText.setFont(new Font(40));
    endScoreText.setTextAlignment(TextAlignment.CENTER);
    endScoreText.setFill(Color.WHITE);
    endScoreText.setStroke(Color.WHITE);
    // Center the text within the button
    endScoreText.setX(350 - endScoreText.getLayoutBounds().getWidth() / 2);
    // Initialize and configure first name input field
    TextField firstNameInput = new TextField();
    firstNameInput.setFont(new Font(24));
    // Initialize and configure first name input label
    Text firstNameLabel = new Text("First name: ");
    firstNameLabel.setFont(new Font(28));
    firstNameLabel.setFill(Color.WHITE);
    // Initialize and configure horizontal box for first name input
    HBox firstNameBox = new HBox(5, firstNameLabel, firstNameInput);
    firstNameBox.setLayoutX(180);
    firstNameBox.setLayoutY(395);
    // Initialize and configure last name input field
    TextField lastNameInput = new TextField();
    lastNameInput.setFont(new Font(24));
    // Initialize and configure last name input label
    Text lastNameLabel = new Text("Last name: ");
    lastNameLabel.setFont(new Font(28));
    lastNameLabel.setFill(Color.WHITE);
    // Initialize and configure horizontal box for last name input
    HBox lastNameBox = new HBox(5, lastNameLabel, lastNameInput);
    lastNameBox.setLayoutX(182);
    lastNameBox.setLayoutY(450);
    // Initialize and configure continue button border
    Rectangle continueRect = new Rectangle(300, 550, 500, 70);
    continueRect.setStroke(Color.WHITE);
    continueRect.setFill(Color.TRANSPARENT);
    continueRect.setStrokeWidth(5);
    // Initialize and configure continue button text
    Text continueText = new Text("Submit and Continue");
    continueText.setFont(new Font(50));
    continueText.setFill(Color.WHITE);
    continueText.setY(600);
    continueText.setX(400 - continueText.getLayoutBounds().getWidth() / 2);
    continueRect.setWidth(continueText.getLayoutBounds().getWidth() + 40);
    continueRect.setX(400 - continueRect.getLayoutBounds().getWidth() / 2);
    // Advance to next field on enter press
    firstNameInput.setOnAction(event -> lastNameInput.requestFocus());
    // Manual game-win override
    game.addEventHandler(// Manual game-win override
    KeyEvent.KEY_PRESSED, // Manual game-win override
    event -> {
        if (event.getCode() == KeyCode.BACK_SLASH && event.isAltDown()) {
            gameWon = true;
            endScoreText.setText("Time: " + time);
            endScoreText.setX(400 - endScoreText.getLayoutBounds().getWidth() / 2);
            game.getOnMouseClicked().handle(mouseEvent);
        }
    });
    // Submit score when enter is pressed in last name entry
    lastNameInput.setOnAction(// Submit score when enter is pressed in last name entry
    event -> {
        if (gameWon) {
            String firstName = firstNameInput.getText();
            String lastName = lastNameInput.getText();
            Long date = System.currentTimeMillis() / 1000;
            highScoresMap.put(date, new HighScore(date, difficulty, firstName, lastName, time));
            refreshTableData();
            try {
                writeHighScores();
            } catch (IOException e) {
                System.out.println("ERROR: couldn't save high scores to file.");
            }
        }
        primaryStage.setScene(menu);
    });
    quitRoot.getChildren().addAll(quitBox, quitText, endScoreText, firstNameBox, lastNameBox, continueRect, continueText);
    // Process new high score data into table and .csv
    EventHandler<MouseEvent> submitScores = // Process new high score data into table and .csv
    event -> {
        if (gameWon) {
            String firstName = firstNameInput.getText();
            String lastName = lastNameInput.getText();
            Long date = System.currentTimeMillis() / 1000;
            highScoresMap.put(date, new HighScore(date, difficulty, firstName, lastName, time));
            refreshTableData();
            try {
                writeHighScores();
            } catch (IOException e) {
                System.out.println("ERROR: couldn't save high scores to file.");
            }
        }
        primaryStage.setScene(menu);
    };
    continueRect.addEventHandler(MouseEvent.MOUSE_CLICKED, submitScores);
    continueText.addEventHandler(MouseEvent.MOUSE_CLICKED, submitScores);
    // Pause screen UI setup
    Rectangle pauseBox = new Rectangle(800, 700, Color.BLACK);
    Text pauseText = new Text(260, 350, "Paused");
    pauseText.setFont(new Font(80));
    pauseText.setStroke(Color.WHITE);
    pauseText.setFill(Color.WHITE);
    pauseText.setTextAlignment(TextAlignment.CENTER);
    Text timeText = new Text(260, 430, "Time: ");
    timeText.setFont(new Font(40));
    timeText.setTextAlignment(TextAlignment.CENTER);
    timeText.setFill(Color.WHITE);
    timeText.setStroke(Color.WHITE);
    timeText.setX(250 - timeText.getLayoutBounds().getWidth() / 2);
    Text bombsText = new Text(550, 430, bombs.getText());
    bombsText.setFont(new Font(40));
    bombsText.setTextAlignment(TextAlignment.CENTER);
    bombsText.setFill(Color.WHITE);
    bombsText.setStroke(Color.WHITE);
    bombsText.setX(500 - bombsText.getLayoutBounds().getWidth() / 2);
    Text infoText = new Text("Loading");
    infoText.setFont(new Font(40));
    infoText.setTextAlignment(TextAlignment.CENTER);
    infoText.setFill(Color.WHITE);
    infoText.setStroke(Color.WHITE);
    infoText.setX(400 - infoText.getLayoutBounds().getWidth() / 2);
    infoText.setY(430);
    Rectangle resume = new Rectangle(300, 500, 200, 70);
    resume.setFill(Color.TRANSPARENT);
    resume.setStroke(Color.WHITE);
    resume.setStrokeWidth(5);
    Text resumeText = new Text("Resume");
    resumeText.setFont(new Font(50));
    resumeText.setFill(Color.WHITE);
    resumeText.setY(550);
    resumeText.setX(400 - resumeText.getLayoutBounds().getWidth() / 2);
    pauseRoot.getChildren().addAll(pauseBox, pauseText, resume, resumeText, infoText);
    EventHandler<MouseEvent> resumeButton = event -> {
        timeTask.play();
        primaryStage.setScene(game);
    };
    resume.addEventHandler(MouseEvent.MOUSE_CLICKED, resumeButton);
    resumeText.addEventHandler(MouseEvent.MOUSE_CLICKED, resumeButton);
    pause.setOnKeyPressed(event -> {
        if (event.getCode() == KeyCode.SPACE) {
            primaryStage.setScene(game);
            timeTask.play();
        } else if (event.getCode() == KeyCode.ESCAPE) {
            primaryStage.setScene(confirmExit);
        }
    });
    game.setOnKeyPressed(event -> {
        if (event.getCode() == KeyCode.SPACE) {
            timeTask.pause();
            infoText.setText("Time: " + time + "s  Bombs: " + flaggedCells + "/" + totalBombs);
            infoText.setX(400 - infoText.getLayoutBounds().getWidth() / 2);
            primaryStage.setScene(pause);
        }
    });
    // High scores UI setup
    scores.setFill(new ImagePattern(bg));
    Text scoresTitle = new Text(120, 120, "High Scores");
    scoresRoot.getChildren().add(scoresTitle);
    scoresTitle.setFont(new Font(70));
    scoresTitle.setStroke(Color.BLACK);
    scoresTitle.setStrokeWidth(5);
    scoresTitle.setTextAlignment(TextAlignment.CENTER);
    scoresTitle.setX(400 - scoresTitle.getLayoutBounds().getWidth() / 2);
    Rectangle back = new Rectangle(100, 550, 200, 70);
    back.setFill(Color.TRANSPARENT);
    back.setStroke(Color.BLACK);
    back.setStrokeWidth(5);
    back.setFill(new Color(1, 1, 1, .5));
    back.setOnMouseEntered(event -> back.setFill(new Color(1, 1, 1, .8)));
    back.setOnMouseExited(event -> back.setFill(new Color(1, 1, 1, .5)));
    scoresRoot.getChildren().add(back);
    Text backText = new Text("Back");
    backText.setFont(new Font(50));
    backText.setFill(Color.BLACK);
    backText.setY(600);
    backText.setX(200 - backText.getLayoutBounds().getWidth() / 2);
    backText.setStroke(Color.BLACK);
    backText.setStrokeWidth(3);
    backText.setOnMouseEntered(event -> back.setFill(new Color(1, 1, 1, .8)));
    backText.setOnMouseExited(event -> back.setFill(new Color(1, 1, 1, .5)));
    scoresRoot.getChildren().add(backText);
    EventHandler<MouseEvent> backButton = event -> primaryStage.setScene(menu);
    back.addEventHandler(MouseEvent.MOUSE_CLICKED, backButton);
    backText.addEventHandler(MouseEvent.MOUSE_CLICKED, backButton);
    Rectangle deleteScore = new Rectangle(500, 550, 200, 70);
    deleteScore.setFill(Color.TRANSPARENT);
    deleteScore.setStroke(Color.BLACK);
    deleteScore.setStrokeWidth(5);
    deleteScore.setFill(new Color(1, 1, 1, .5));
    deleteScore.setOnMouseEntered(event -> deleteScore.setFill(new Color(1, 1, 1, .8)));
    deleteScore.setOnMouseExited(event -> deleteScore.setFill(new Color(1, 1, 1, .5)));
    scoresRoot.getChildren().add(deleteScore);
    Text deleteScoresText = new Text("Delete");
    deleteScoresText.setFont(new Font(50));
    deleteScoresText.setFill(Color.BLACK);
    deleteScoresText.setY(600);
    deleteScoresText.setX(600 - deleteScoresText.getLayoutBounds().getWidth() / 2);
    deleteScoresText.setStroke(Color.BLACK);
    deleteScoresText.setStrokeWidth(3);
    deleteScoresText.setOnMouseEntered(event -> deleteScore.setFill(new Color(1, 1, 1, .8)));
    deleteScoresText.setOnMouseExited(event -> deleteScore.setFill(new Color(1, 1, 1, .5)));
    scoresRoot.getChildren().add(deleteScoresText);
    // Delete selected high score from table and .csv
    EventHandler<MouseEvent> deleteScoreButton = // Delete selected high score from table and .csv
    event -> {
        if (table.getSelectionModel().getSelectedIndex() == -1)
            return;
        HighScore current = (HighScore) table.getSelectionModel().getSelectedItem();
        highScoresMap.remove(Long.parseLong(current.getRawID()));
        refreshTableData();
        try {
            writeHighScores();
        } catch (IOException e) {
            System.out.println("ERROR: couldn't save high scores to file.");
        }
    };
    deleteScore.addEventHandler(MouseEvent.MOUSE_CLICKED, deleteScoreButton);
    deleteScoresText.addEventHandler(MouseEvent.MOUSE_CLICKED, deleteScoreButton);
    CheckBox editable = new CheckBox("Edit mode");
    editable.setSelected(true);
    editable.setLayoutX(630);
    editable.setLayoutY(30);
    editable.setFont(Font.font("Tahoma", FontWeight.BLACK, 18));
    scoresRoot.getChildren().add(editable);
    // High scores table setup
    table = new TableView();
    table.setLayoutX(100);
    table.setLayoutY(200);
    table.setPrefWidth(600);
    table.setPrefHeight(300);
    table.setEditable(true);
    EventHandler<TableColumn.CellEditEvent> fieldEditCommit = event -> {
        if (table.getSelectionModel().getSelectedIndex() == -1)
            return;
        HighScore current = (HighScore) table.getSelectionModel().getSelectedItem();
        switch(event.getTableColumn().getId()) {
            case "Difficulty":
                highScoresMap.get(Long.parseLong(current.getRawID())).setDifficulty((String) event.getNewValue());
                break;
            case "First Name":
                highScoresMap.get(Long.parseLong(current.getRawID())).setFirstName((String) event.getNewValue());
                break;
            case "Last Name":
                highScoresMap.get(Long.parseLong(current.getRawID())).setLastName((String) event.getNewValue());
                break;
        }
        try {
            writeHighScores();
        } catch (IOException e) {
            System.out.println("Error saving scores");
        }
        refreshTableData();
    };
    table.setStyle(".list-view .scroll-bar:horizontal .increment-arrow,.list-view .scroll-bar:horizontal .decrement-arrow,.list-view .scroll-bar:horizontal .increment-button,.list-view .scroll-bar:horizontal .decrement-button {-fx-padding:0;}");
    IDCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("ID"));
    IDCol.prefWidthProperty().bind(table.widthProperty().multiply(0.3));
    IDCol.setId("ID");
    IDCol.setSortable(false);
    IDCol.setResizable(false);
    difficultyCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("difficulty"));
    difficultyCol.setCellFactory(TextFieldTableCell.forTableColumn());
    difficultyCol.setOnEditCommit(fieldEditCommit);
    difficultyCol.prefWidthProperty().bind(table.widthProperty().multiply(0.175));
    difficultyCol.setId("Difficulty");
    difficultyCol.setSortable(false);
    difficultyCol.setResizable(false);
    firstNameCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("firstName"));
    firstNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
    firstNameCol.setOnEditCommit(fieldEditCommit);
    firstNameCol.prefWidthProperty().bind(table.widthProperty().multiply(0.175));
    firstNameCol.setId("First Name");
    firstNameCol.setSortable(false);
    firstNameCol.setResizable(false);
    lastNameCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("lastName"));
    lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
    lastNameCol.setOnEditCommit(fieldEditCommit);
    lastNameCol.prefWidthProperty().bind(table.widthProperty().multiply(0.175));
    lastNameCol.setId("Last Name");
    lastNameCol.setSortable(false);
    lastNameCol.setResizable(false);
    timeCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("time"));
    timeCol.prefWidthProperty().bind(table.widthProperty().multiply(0.172));
    timeCol.setId("Time");
    timeCol.setSortable(true);
    timeCol.setResizable(false);
    table.getSortOrder().setAll(timeCol);
    timeCol.setSortType(TableColumn.SortType.ASCENDING);
    table.getColumns().addAll(IDCol, difficultyCol, firstNameCol, lastNameCol, timeCol);
    table.setOnMousePressed(event -> table.getSortOrder().setAll(timeCol));
    MenuItem tableDelete = new MenuItem("Delete");
    tableDelete.setOnAction(event -> {
        if (table.getSelectionModel().getSelectedIndex() == -1)
            return;
        HighScore current = (HighScore) table.getSelectionModel().getSelectedItem();
        highScoresMap.remove(Long.parseLong(current.getRawID()));
        refreshTableData();
    });
    editable.setOnAction(event -> {
        if (event.getSource() instanceof CheckBox) {
            CheckBox checkBox = (CheckBox) event.getSource();
            if (checkBox.isSelected()) {
                difficultyCol.setEditable(true);
                firstNameCol.setEditable(true);
                lastNameCol.setEditable(true);
            } else {
                difficultyCol.setEditable(false);
                firstNameCol.setEditable(false);
                lastNameCol.setEditable(false);
            }
        }
    });
    // Search abilities setup
    table.setPlaceholder(new Label("Search did not return any results."));
    ObservableList<String> searchOptions = FXCollections.observableArrayList("Date", "Difficulty", "First Name", "Last Name", "Time");
    ComboBox searchSelector = new ComboBox(searchOptions);
    searchSelector.getSelectionModel().select(2);
    searchSelector.setLayoutX(585 - searchSelector.getLayoutBounds().getWidth() / 2);
    searchSelector.setLayoutY(160);
    TextField search = new TextField();
    search.setPromptText("Search");
    search.setPrefWidth(480);
    search.setPrefHeight(searchSelector.getHeight());
    search.setLayoutX(100);
    search.setLayoutY(160);
    // Execute search on selection mode change
    searchSelector.setOnAction(event -> refreshTableData(search.getText(), (String) searchSelector.getSelectionModel().getSelectedItem()));
    // Execute search on any keystroke
    search.setOnKeyReleased(event -> {
        String query = search.getText();
        refreshTableData(query, (String) searchSelector.getSelectionModel().getSelectedItem());
    });
    scoresRoot.getChildren().addAll(table, searchSelector, search);
    // Menu setup
    menu.setFill(new ImagePattern(bg));
    Text title = new Text(120, 120, "3D Minesweeper");
    menuRoot.getChildren().add(title);
    title.setFont(new Font(70));
    title.setStroke(Color.BLACK);
    title.setStrokeWidth(5);
    title.setTextAlignment(TextAlignment.CENTER);
    title.setX(400 - title.getLayoutBounds().getWidth() / 2);
    Text name = new Text(150, 200, "Computer Science (ICS3U-01) FST\nBy Seth Damiani");
    menuRoot.getChildren().add(name);
    name.setFont(new Font(30));
    name.setTextAlignment(TextAlignment.CENTER);
    name.setStroke(Color.BLACK);
    name.setStrokeWidth(2);
    name.setX(400 - name.getLayoutBounds().getWidth() / 2);
    Rectangle easy = new Rectangle(250, 300, 300, 75);
    menuRoot.getChildren().add(easy);
    easy.setStroke(Color.BLACK);
    easy.setStrokeWidth(5);
    easy.setFill(new Color(1, 1, 1, .5));
    easy.setOnMouseEntered(event -> easy.setFill(new Color(1, 1, 1, .8)));
    easy.setOnMouseExited(event -> easy.setFill(new Color(1, 1, 1, .5)));
    Text easyText = new Text(400, 337.5, "Easy");
    menuRoot.getChildren().add(easyText);
    easyText.setFont(new Font(50));
    easyText.setTextAlignment(TextAlignment.CENTER);
    easyText.setStroke(Color.BLACK);
    easyText.setStrokeWidth(3);
    easyText.setX(400 - easyText.getLayoutBounds().getWidth() / 2);
    easyText.setY(350);
    easyText.setOnMouseEntered(event -> easy.setFill(new Color(1, 1, 1, .8)));
    easyText.setOnMouseExited(event -> easy.setFill(new Color(1, 1, 1, .5)));
    Rectangle medium = new Rectangle(250, 400, 300, 75);
    menuRoot.getChildren().add(medium);
    medium.setStroke(Color.BLACK);
    medium.setStrokeWidth(5);
    medium.setFill(Color.TRANSPARENT);
    medium.setFill(new Color(1, 1, 1, .5));
    medium.setOnMouseEntered(event -> medium.setFill(new Color(1, 1, 1, .8)));
    medium.setOnMouseExited(event -> medium.setFill(new Color(1, 1, 1, .5)));
    Text mediumText = new Text(400, 337.5, "Medium");
    menuRoot.getChildren().add(mediumText);
    mediumText.setFont(new Font(50));
    mediumText.setTextAlignment(TextAlignment.CENTER);
    mediumText.setStroke(Color.BLACK);
    mediumText.setStrokeWidth(3);
    mediumText.setX(400 - mediumText.getLayoutBounds().getWidth() / 2);
    mediumText.setY(450);
    mediumText.setOnMouseEntered(event -> medium.setFill(new Color(1, 1, 1, .8)));
    mediumText.setOnMouseExited(event -> medium.setFill(new Color(1, 1, 1, .5)));
    Rectangle hard = new Rectangle(250, 500, 300, 75);
    menuRoot.getChildren().add(hard);
    hard.setStroke(Color.BLACK);
    hard.setStrokeWidth(5);
    hard.setFill(Color.TRANSPARENT);
    hard.setFill(new Color(1, 1, 1, .5));
    hard.setOnMouseEntered(event -> hard.setFill(new Color(1, 1, 1, .8)));
    hard.setOnMouseExited(event -> hard.setFill(new Color(1, 1, 1, .5)));
    Text hardText = new Text(400, 337.5, "Hard");
    menuRoot.getChildren().add(hardText);
    hardText.setFont(new Font(50));
    hardText.setTextAlignment(TextAlignment.CENTER);
    hardText.setStroke(Color.BLACK);
    hardText.setStrokeWidth(3);
    hardText.setX(400 - hardText.getLayoutBounds().getWidth() / 2);
    hardText.setY(550);
    hardText.setOnMouseEntered(event -> hard.setFill(new Color(1, 1, 1, .8)));
    hardText.setOnMouseExited(event -> hard.setFill(new Color(1, 1, 1, .5)));
    Rectangle highscores = new Rectangle(600, 550, 150, 100);
    menuRoot.getChildren().add(highscores);
    highscores.setStroke(Color.BLACK);
    highscores.setStrokeWidth(5);
    highscores.setFill(Color.TRANSPARENT);
    highscores.setFill(new Color(1, 1, 1, .5));
    highscores.setOnMouseEntered(event -> highscores.setFill(new Color(1, 1, 1, .8)));
    highscores.setOnMouseExited(event -> highscores.setFill(new Color(1, 1, 1, .5)));
    Text highscoresText = new Text("High\nScores");
    menuRoot.getChildren().add(highscoresText);
    highscoresText.setFont(new Font(40));
    highscoresText.setTextAlignment(TextAlignment.CENTER);
    highscoresText.setStroke(Color.BLACK);
    highscoresText.setStrokeWidth(3);
    highscoresText.setX(675 - highscoresText.getLayoutBounds().getWidth() / 2);
    highscoresText.setY(590);
    highscoresText.setOnMouseEntered(event -> highscores.setFill(new Color(1, 1, 1, .8)));
    highscoresText.setOnMouseExited(event -> highscores.setFill(new Color(1, 1, 1, .5)));
    Rectangle exit = new Rectangle(50, 550, 150, 100);
    menuRoot.getChildren().add(exit);
    exit.setStroke(Color.BLACK);
    exit.setStrokeWidth(5);
    exit.setFill(Color.TRANSPARENT);
    exit.setFill(new Color(1, 1, 1, .5));
    exit.setOnMouseEntered(event -> exit.setFill(new Color(1, 1, 1, .8)));
    exit.setOnMouseExited(event -> exit.setFill(new Color(1, 1, 1, .5)));
    Text exitText = new Text("Exit");
    menuRoot.getChildren().add(exitText);
    exitText.setFont(new Font(40));
    exitText.setTextAlignment(TextAlignment.CENTER);
    exitText.setStroke(Color.BLACK);
    exitText.setStrokeWidth(3);
    exitText.setX(125 - exitText.getLayoutBounds().getWidth() / 2);
    exitText.setY(610);
    exitText.setOnMouseEntered(event -> exit.setFill(new Color(1, 1, 1, .8)));
    exitText.setOnMouseExited(event -> exit.setFill(new Color(1, 1, 1, .5)));
    // Handle click on easy button
    EventHandler<MouseEvent> easyButton = event -> {
        resetGame();
        placeBombs(50);
        totalBombs = 50;
        flaggedCells = 0;
        placeNumbers();
        bombs.setText("Bombs: " + flaggedCells + "/" + totalBombs);
        difficulty = "Easy";
        primaryStage.setScene(game);
        time = 0;
        timeTask.play();
    };
    easy.addEventHandler(MouseEvent.MOUSE_CLICKED, easyButton);
    easyText.addEventHandler(MouseEvent.MOUSE_CLICKED, easyButton);
    // Handle click on medium button
    EventHandler<MouseEvent> mediumButton = event -> {
        resetGame();
        placeBombs(100);
        totalBombs = 100;
        flaggedCells = 0;
        placeNumbers();
        bombs.setText("Bombs: " + flaggedCells + "/" + totalBombs);
        difficulty = "Medium";
        primaryStage.setScene(game);
        time = 0;
        timeTask.play();
    };
    medium.addEventHandler(MouseEvent.MOUSE_CLICKED, mediumButton);
    mediumText.addEventHandler(MouseEvent.MOUSE_CLICKED, mediumButton);
    // Handle click on hard button
    EventHandler<MouseEvent> hardButton = event -> {
        resetGame();
        placeBombs(150);
        totalBombs = 150;
        flaggedCells = 0;
        placeNumbers();
        bombs.setText("Bombs: " + flaggedCells + "/" + totalBombs);
        difficulty = "Hard";
        primaryStage.setScene(game);
        time = 0;
        timeTask.play();
    };
    hard.addEventHandler(MouseEvent.MOUSE_CLICKED, hardButton);
    hardText.addEventHandler(MouseEvent.MOUSE_CLICKED, hardButton);
    EventHandler<MouseEvent> exitButton = event -> System.exit(0);
    exit.addEventHandler(MouseEvent.MOUSE_CLICKED, exitButton);
    exitText.addEventHandler(MouseEvent.MOUSE_CLICKED, exitButton);
    EventHandler<MouseEvent> highScoresButton = event -> primaryStage.setScene(scores);
    highscoresText.addEventHandler(MouseEvent.MOUSE_CLICKED, highScoresButton);
    highscores.addEventHandler(MouseEvent.MOUSE_CLICKED, highScoresButton);
    readHighScores();
    refreshTableData();
    // Continuously check if game has been won or lost
    game.setOnMouseClicked(event -> {
        if (gameLost) {
            timeTask.stop();
            endScoreText.setText("Time: " + time);
            endScoreText.setX(400 - endScoreText.getLayoutBounds().getWidth() / 2);
            quitBox.setFill(Color.INDIANRED);
            quitText.setText("You Lost");
            quitText.setX(400 - quitText.getLayoutBounds().getWidth() / 2);
            firstNameBox.setVisible(false);
            lastNameBox.setVisible(false);
            endScoreText.setVisible(false);
            continueText.setText("Menu");
            continueText.setX(400 - continueText.getLayoutBounds().getWidth() / 2);
            continueRect.setWidth(continueText.getLayoutBounds().getWidth() + 40);
            continueRect.setX(400 - continueRect.getLayoutBounds().getWidth() / 2);
            primaryStage.setScene(quit);
        }
        if (gameWon) {
            timeTask.stop();
            quitBox.setFill(Color.FORESTGREEN);
            quitText.setText("You Won!");
            quitText.setX(400 - quitText.getLayoutBounds().getWidth() / 2);
            firstNameBox.setVisible(true);
            lastNameBox.setVisible(true);
            endScoreText.setVisible(true);
            endScoreText.setText("Time: " + time);
            continueText.setText("Submit & Continue");
            continueText.setX(400 - continueText.getLayoutBounds().getWidth() / 2);
            continueRect.setWidth(continueText.getLayoutBounds().getWidth() + 40);
            continueRect.setX(400 - continueRect.getLayoutBounds().getWidth() / 2);
            primaryStage.setScene(quit);
        }
    });
    primaryStage.setTitle("Minesweeper 3D - Seth Damiani");
    primaryStage.setResizable(false);
    primaryStage.setScene(menu);
    primaryStage.show();
}
Also used : EventHandler(javafx.event.EventHandler) FontWeight(javafx.scene.text.FontWeight) Scene(javafx.scene.Scene) MouseButton(javafx.scene.input.MouseButton) java.util(java.util) Point3D(javafx.geometry.Point3D) javafx.scene.control(javafx.scene.control) Rotate(javafx.scene.transform.Rotate) MouseEvent(javafx.scene.input.MouseEvent) FXCollections(javafx.collections.FXCollections) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) Application(javafx.application.Application) TextAlignment(javafx.scene.text.TextAlignment) RotateTransition(javafx.animation.RotateTransition) PrintWriter(java.io.PrintWriter) KeyCode(javafx.scene.input.KeyCode) HBox(javafx.scene.layout.HBox) Color(javafx.scene.paint.Color) KeyFrame(javafx.animation.KeyFrame) PropertyValueFactory(javafx.scene.control.cell.PropertyValueFactory) Font(javafx.scene.text.Font) FileWriter(java.io.FileWriter) Timeline(javafx.animation.Timeline) ImagePattern(javafx.scene.paint.ImagePattern) Rectangle(javafx.scene.shape.Rectangle) IOException(java.io.IOException) KeyEvent(javafx.scene.input.KeyEvent) Group(javafx.scene.Group) File(java.io.File) Text(javafx.scene.text.Text) Duration(javafx.util.Duration) Interpolator(javafx.animation.Interpolator) Stage(javafx.stage.Stage) ObservableList(javafx.collections.ObservableList) Image(javafx.scene.image.Image) HBox(javafx.scene.layout.HBox) Rectangle(javafx.scene.shape.Rectangle) Font(javafx.scene.text.Font) ImagePattern(javafx.scene.paint.ImagePattern) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) MouseEvent(javafx.scene.input.MouseEvent) Color(javafx.scene.paint.Color) Text(javafx.scene.text.Text) IOException(java.io.IOException) Timeline(javafx.animation.Timeline) KeyFrame(javafx.animation.KeyFrame)

Aggregations

EventHandler (javafx.event.EventHandler)12 MouseEvent (javafx.scene.input.MouseEvent)7 KeyFrame (javafx.animation.KeyFrame)6 Timeline (javafx.animation.Timeline)6 FXCollections (javafx.collections.FXCollections)6 ObservableList (javafx.collections.ObservableList)6 ActionEvent (javafx.event.ActionEvent)5 Scene (javafx.scene.Scene)5 Duration (javafx.util.Duration)5 KeyValue (javafx.animation.KeyValue)4 Color (javafx.scene.paint.Color)4 Rectangle (javafx.scene.shape.Rectangle)4 Rotate (javafx.scene.transform.Rotate)4 ArrayList (java.util.ArrayList)3 List (java.util.List)3 ObjectProperty (javafx.beans.property.ObjectProperty)3 Insets (javafx.geometry.Insets)3 Pos (javafx.geometry.Pos)3 Button (javafx.scene.control.Button)3 Label (javafx.scene.control.Label)3