簡體   English   中英

javafx 如何根據次要場景中所做的更改更改/刷新我的主要場景及其控件?

[英]javafx How can I change/refresh my primary scene and its controls based on changes made in secondary scene?

我想要做的是在切換回它時在我的主要場景中填充控件的次要場景中進行更改。 下面顯示的代碼詳細說明了我正在嘗試做的事情的簡化版本。 在我的主要場景中,我有 4 個帶有名字的復選框,例如有人從這些名字中選擇邀請他們參加聚會。 但是我在底部添加了一個編輯按鈕,它將把用戶帶到第二個場景,在那里他們可以向列表中添加一個新字符串,該列表生成原始 4 個復選框。 在切換回主場景時,我希望新名稱位於復選框中。 我意識到我將不得不徹底重新思考/大修我的代碼,但我想不出一種方法來做到這一點。 這是可能的,有人可以幫忙嗎?

// EditSceneTesting

import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.event.*;

public class EditSceneTesting extends Application {
   private static ArrayList<String> objects;
   private Scene scene1;
   private Scene scene2;
   
   public static void main(String[] args) throws FileNotFoundException {
      File inputFile = new File("data.txt");
      Scanner inFile = new Scanner(inputFile);
      objects = new ArrayList<String>();
      
      while (inFile.hasNextLine()) {
         String line = inFile.nextLine();
         
         if (line.equals("")) {
            continue;
         }
         
         objects.add(line);
      }
      
      launch(args);
   }
   
   @Override
   public void start(Stage primaryStage) {
      // scene 1
      VBox checkBoxVBox = new VBox(5);
      
      for (String obj : objects) {
         CheckBox checkBox = new CheckBox(obj);
         checkBoxVBox.getChildren().addAll(checkBox);
      }
      
      Button addObjectsButton = new Button("Add Objects");
      AddObjectsButtonHandler addObjectsHandler = new AddObjectsButtonHandler(primaryStage);
      addObjectsButton.setOnAction(addObjectsHandler);
      
      VBox scene1Container = new VBox(20,checkBoxVBox,addObjectsButton);
      scene1 = new Scene(scene1Container,300,300);
      
      // scene 2
      Label objectLabel = new Label("Object:");
      TextField objectTextField = new TextField();
      
      HBox newObjectHBox = new HBox(5,objectLabel,objectTextField);
      
      Button addButton = new Button("Add");
      AddButtonHandler addHandler = new AddButtonHandler(objectTextField);
      addButton.setOnAction(addHandler);
      
      Button returnButton = new Button("Return to CheckBox Screen");
      ReturnButtonHandler returnHandler = new ReturnButtonHandler(primaryStage);
      returnButton.setOnAction(returnHandler);
      
      VBox scene2Container = new VBox(20,newObjectHBox,addButton,returnButton);
      scene2 = new Scene(scene2Container,300,300);
      
      primaryStage.setTitle("Edit Scene Testing");
      primaryStage.setScene(scene1);
      primaryStage.show();
   }
   
   public class AddObjectsButtonHandler implements EventHandler<ActionEvent> {
      private Stage primaryStage;
      
      public AddObjectsButtonHandler(Stage primStage) {
         primaryStage = primStage;
      }
      
      @Override
      public void handle(ActionEvent event) {
         primaryStage.setScene(scene2);
      }
   }
   
   public class AddButtonHandler implements EventHandler<ActionEvent> {
      private TextField objectTextField;
      
      public AddButtonHandler(TextField objectTF) {
         objectTextField = objectTF;
      }
      
      @Override
      public void handle(ActionEvent event) {
         // here can add to list or add to file whichever is best for solution
         objects.add(objectTextField.getText());
         
         objectTextField.clear();
      }
   }
   
   public class ReturnButtonHandler implements EventHandler<ActionEvent> {
      private Stage primaryStage;
      
      public ReturnButtonHandler(Stage primStage) {
         primaryStage = primStage;
      }
      
      @Override
      public void handle(ActionEvent event) {
         primaryStage.setScene(scene1);
      }
   }
}

如果您不使用復選框,則可以創建兩個列表並允許用戶將人員拖放到“已邀請”列表中。 填充 Names 列表,允許用戶向該列表添加一個項目(您可以使用第二階段,甚至警報彈出窗口)並將輸入的名稱添加到列表中。 然后他們可以將任何名稱拖到想要的列表中。 結帳這個例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM