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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5