Связывание интерфейса с работой программы - 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();
}
}