- package FXExample;
- import javafx.animation.Animation;
- import javafx.animation.KeyFrame;
- import javafx.animation.Timeline;
- import javafx.application.Application;
- import javafx.application.Platform;
- import javafx.event.ActionEvent;
- import javafx.event.EventHandler;
- import javafx.scene.Group;
- import javafx.scene.Scene;
- import javafx.scene.control.Menu;
- import javafx.scene.control.MenuBar;
- import javafx.scene.control.MenuItem;
- import javafx.scene.control.RadioMenuItem;
- import javafx.scene.control.RadioMenuItemBuilder;
- import javafx.scene.control.SeparatorMenuItem;
- import javafx.scene.control.ToggleGroup;
- import javafx.scene.input.KeyCode;
- import javafx.scene.input.KeyCodeCombination;
- import javafx.scene.input.KeyCombination;
- import javafx.scene.paint.Color;
- import javafx.scene.paint.CycleMethod;
- import javafx.scene.paint.RadialGradient;
- import javafx.scene.paint.Stop;
- import javafx.scene.shape.Circle;
- import javafx.stage.Stage;
- import javafx.util.Duration;
- public class DevelopingADialog extends Application{
- static Stage LOGIN_DIALOG;
- static int dx = 1;
- static int dy = 1;
- public static void main(String[] args) {
- launch(args);
- }
- private static Stage createLoginDialog(Stage parent, boolean modal){//modal:模式
- if(LOGIN_DIALOG != null){
- LOGIN_DIALOG.close();
- }
- return new MyDialog(parent,modal,"WelCome to javaFX");
- }
- @Override
- public void start(final Stage primaryStage) throws Exception {
- primaryStage.setTitle("Chapter 1-17 Developing a Dialog");
- Group root = new Group();
- Scene scene = new Scene(root, 433, 312);
- MenuBar menuBar = new MenuBar();
- menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
- Menu menu = new Menu("Home");
- // add change password menu itme
- MenuItem newItem = new MenuItem("Change Password", null);
- newItem.setOnAction(new EventHandler<ActionEvent>(){
- @Override
- public void handle(ActionEvent event) {
- if(LOGIN_DIALOG == null){
- LOGIN_DIALOG = createLoginDialog(primaryStage, true);
- }
- LOGIN_DIALOG.sizeToScene();
- LOGIN_DIALOG.show();
- }
- });
- menu.getItems().add(newItem);
- // add separator
- menu.getItems().add(new SeparatorMenuItem());
- // add non modal menu item
- ToggleGroup modalGroup = new ToggleGroup();
- RadioMenuItem nonModalItem = RadioMenuItemBuilder.create()
- .toggleGroup(modalGroup)
- .text("Non Modal")
- .selected(true)
- .build();
- nonModalItem.setOnAction(new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- LOGIN_DIALOG = createLoginDialog(primaryStage, false);
- }
- });
- menu.getItems().add(nonModalItem);
- // add modal selection
- RadioMenuItem modalItem = RadioMenuItemBuilder.create()
- .toggleGroup(modalGroup)
- .text("Modal")
- .selected(true)
- .build();
- modalItem.setOnAction(new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- LOGIN_DIALOG = createLoginDialog(primaryStage, true);
- }
- });
- menu.getItems().add(modalItem);
- // add separator
- menu.getItems().add(new SeparatorMenuItem());
- // add exit
- MenuItem exitItem = new MenuItem("Exit", null);
- exitItem.setMnemonicParsing(true);
- exitItem.setAccelerator(new KeyCodeCombination(KeyCode.X, KeyCombination.CONTROL_DOWN));
- exitItem.setOnAction(new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- Platform.exit();
- }
- });
- menu.getItems().add(exitItem);
- // add menu
- menuBar.getMenus().add(menu);
- // menu bar to window
- root.getChildren().add(menuBar);
- primaryStage.setScene(scene);
- primaryStage.show();
- addBouncyBall(scene);
- }
- private void addBouncyBall(final Scene scene){
- final Circle ball = new Circle(100,100,20);
- RadialGradient gradient1 = new RadialGradient(
- 0,
- .1,
- 100,
- 100,
- 20,
- false,
- CycleMethod.NO_CYCLE,
- new Stop(0, Color.WHITE),
- new Stop(1, Color.GREEN));
- ball.setFill(gradient1);
- final Group root = (Group) scene.getRoot();
- root.getChildren().add(ball);
- Timeline tl = new Timeline();
- tl.setCycleCount(Animation.INDEFINITE);//indefinite:不确定的。
- KeyFrame moveBall = new KeyFrame(Duration.seconds(.01500),
- new EventHandler<ActionEvent>(){
- @Override
- public void handle(ActionEvent event) {
- double xMin = ball.getBoundsInParent().getMinX();
- double yMin = ball.getBoundsInParent().getMinY();
- double xMax = ball.getBoundsInParent().getMaxX();
- double yMax = ball.getBoundsInParent().getMaxY();
- if(xMin<0 || xMax>scene.getWidth()){
- dx = dx * -1;
- }
- if (yMin < 0 || yMax > scene.getHeight()) {
- dy = dy * -1;
- }
- ball.setTranslateX(ball.getTranslateX() + dx);
- ball.setTranslateY(ball.getTranslateY() + dy);
- }
- });
- tl.getKeyFrames().add(moveBall);
- tl.play();
- }
- }
- package FXExample;
- import javafx.event.ActionEvent;
- import javafx.event.EventHandler;
- import javafx.geometry.HPos;
- import javafx.geometry.Insets;
- import javafx.scene.Group;
- import javafx.scene.Scene;
- import javafx.scene.control.Button;
- import javafx.scene.control.Label;
- import javafx.scene.control.PasswordField;
- import javafx.scene.control.TextField;
- import javafx.scene.layout.GridPane;
- import javafx.stage.Modality;
- import javafx.stage.Stage;
- public class MyDialog extends Stage {
- public MyDialog(Stage owner, boolean modality, String title){
- super();
- initOwner(owner);
- Modality m = modality ? Modality.APPLICATION_MODAL : Modality.NONE;
- initModality(m);
- setOpacity(.90);
- setTitle(title);
- Group root = new Group();
- Scene scene = new Scene(root, 250, 150);
- setScene(scene);
- GridPane gridpane = new GridPane();
- gridpane.setPadding(new Insets(5));
- gridpane.setHgap(5);
- gridpane.setVgap(5);
- Label mainLabel = new Label("Enter User Name & Password");
- gridpane.add(mainLabel, 1, 0, 2, 1);
- Label userNameLbl = new Label("User Name: ");
- gridpane.add(userNameLbl, 0, 1);
- Label passwordLbl = new Label("Password: ");
- gridpane.add(passwordLbl, 0, 2);
- // username text field
- final TextField userNameFld = new TextField("Admin");
- gridpane.add(userNameFld, 1, 1);
- // password field
- final PasswordField passwordFld = new PasswordField();
- passwordFld.setText("drowssap");
- gridpane.add(passwordFld, 1, 2);
- Button login = new Button("Change");
- login.setOnAction(new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- close();
- }
- });
- gridpane.add(login, 1, 3);
- GridPane.setHalignment(login, HPos.RIGHT);
- root.getChildren().add(gridpane);
- }
- }