Связывание интерфейса с работой программы - Java
Формулировка задачи:
Написал 2 класса, которые отвечают за 2 разных окна. Не знаю только как сделать, чтобы по нажатию на кнопку в первом одном окне, оно закрывалось и открывалось второе.
Вообще, я только начал изучать Java и отчетливо чувствую, что весь мой код - это целая скульптура из костылей. Как я понял, мне вообще стоило сделать родительский объект окна с PrimaryStage и 2 дочерних объекта с разными сценами, которые бы заменяли друг друга без закрытия окна. Вот только как это сделать я не знаю. Ниже приведен код обоих классов и класс мэйн, который в моем представлении является контроллером программы.
Вопрос номер один описан выше - надо вызвать окно два после нажатия на кнопку в окне один. Но больше меня интересует показать, как надо было сделать правильно.
package sample; import javafx.application.Application; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.geometry.Orientation; import javafx.geometry.Pos; 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.input.MouseEvent; import javafx.scene.layout.*; import javafx.scene.paint.Color; import javafx.stage.Stage; import java.io.FileNotFoundException; public class Main_win extends Application { String log = ""; String pas = ""; @Override public void start(Stage startwin) { startwin.setTitle("NNP"); FlowPane root = new FlowPane(Orientation.VERTICAL); Scene scene = new Scene(root, 250, 500, Color.ALICEBLUE); root.setAlignment(Pos.CENTER); Background back = new Background(new BackgroundFill(Color.TRANSPARENT,new CornerRadii(10),new Insets(5))); root.setBackground(back); startwin.setScene(scene); Label wmes = new Label(); wmes.setText("Welcome to the nnp!"); Label logl = new Label(); logl.setText("Login:"); TextField login = new TextField(); login.setPromptText("Enter your Login"); Label pasl = new Label(); pasl.setText("Password:"); PasswordField password = new PasswordField(); password.setPromptText("Enter Password"); Button enter = new Button(); enter.setText("Enter"); enter.setOnMouseClicked(new EventHandler<MouseEvent>(){ public void handle(MouseEvent event) { log = login.getText(); System.out.println(log); pas = password.getText(); System.out.println(pas); } }); root.getChildren().addAll(wmes,logl,login,pasl,password,enter); startwin.show(); } public static void main(String[] args) { launch(args); } }
package sample; import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.*; import javafx.scene.paint.Color; import javafx.stage.Stage; import java.io.FileInputStream; import java.io.FileNotFoundException; public class LoadScreen extends Application { @Override public void start(Stage stage) throws FileNotFoundException { // load the image Image image = new Image(new FileInputStream("C:\\Users\\Андрей\\IdeaProjects\\nnp\\src\\sample\\load.gif")); // simple displays ImageView the image as is ImageView iv1 = new ImageView(); iv1.setImage(image); FlowPane root = new FlowPane(); Scene scene = new Scene(root, 250, 500); scene.setFill(Color.ALICEBLUE); Background back = new Background(new BackgroundFill(Color.TRANSPARENT,new CornerRadii(10),new Insets(5))); root.setBackground(back); HBox box = new HBox(); box.getChildren().add(iv1); root.getChildren().add(box); stage.setTitle("Authentication"); root.setAlignment(Pos.CENTER); stage.setScene(scene); stage.show(); } public static void main(String[] args) { Application.launch(args); } }
package sample; import java.io.FileNotFoundException; import javafx.application.Application; import javafx.stage.Stage; /** * Created by Андрей Солодовников on 07.05.2016. */ public class Main extends Application{ public static boolean flag = false; @Override public void start(Stage startwin) throws FileNotFoundException { Stage win = new Stage(); Main_win window = new Main_win(); window.start(win); LoadScreen lwin = new LoadScreen(); lwin.start(startwin); } public static void main(String args[]){ launch(args); } }
Решение задачи: «Связывание интерфейса с работой программы»
textual
Листинг программы
/** * * @author Nicholas White */ public class LoadScreen extends Stage { private final Image image = new Image(getClass().getResourceAsStream("back.jpg")); public LoadScreen() { final ImageView iv1 = new ImageView(image); FlowPane root = new FlowPane(); Scene scene = new Scene(root, 250, 500); scene.setFill(Color.ALICEBLUE); Background back = new Background(new BackgroundFill(Color.TRANSPARENT,new CornerRadii(10),new Insets(5))); root.setBackground(back); HBox box = new HBox(); box.getChildren().add(iv1); root.getChildren().add(box); root.setAlignment(Pos.CENTER); setScene(scene); setTitle("Authentication"); show(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д