如何获取并将值从类传递到另一个类?

时间:2016-11-24 18:55:30

标签: java inheritance javafx

我正在尝试创建TextField来获取用户名。我已经创建了一个包含UI组件的新类。

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class start extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Label label = new Label("Name:");
        TextField textField = new TextField();
        HBox hBox = new HBox();
        hBox.getChildren().addAll(label,textField);
        hBox.setSpacing(10);
        Scene scene = new Scene(hBox,300,200);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Hello");
        primaryStage.show();
    }
}

我想在“Hello”窗口中输入名称,以便在另一个班级ShowOff中使用它。

ShowOff Class

import javafx.application.Application;

public class ShowOff {
    ShowOff() {
        Application.launch(start.class,"myClass");
    }

    public static void main(String[] args)
    {

    }
}

我该如何实现?

4 个答案:

答案 0 :(得分:1)

您的整体结构并不真正适合JavaFX应用程序生命周期。通过调用Application.launch(...)启动JavaFX应用程序,然后start()为您创建应用程序类的实例,并调用其launch(...)方法。不会返回对创建的实例的引用,并且start()方法在应用程序退出之前不会返回(因此如果有的话,它将没有用处)。

因此,您应该将public class ShowOff extends Application { @Override public void start(Stage primaryStage) { HelloScreen hello = new HelloScreen(); primaryStage.setScene(new Scene(hello.getView())); // show stage and wait until it closes: primaryStage.showAndWait(); String message = hello.getMessage(); // do something with message... System.out.println(message); } public static void main(String[] args) { Application.launch(args); } } 方法视为应用程序的入口点,并让该方法除了启动之外什么也不做。

因此,要在启动类中使用“hello”消息从屏幕获取值,我会执行以下操作:

public class HelloScreen {
    private TextField textField ;
    private VBox view ;

    public HelloScreen() {
        Label label = new Label("Name:");
        textField = new TextField();
        HBox hBox = new HBox(10, label,textField);
        hBox.setAlignment(Pos.CENTER);
        Button button = new Button("Show User Input In Console");

        // On click, close the window:
        button.setOnAction( e -> view.getScene().getWindow().hide());

        view = new VBox(10, hBox, button);
        view.setAlignment(Pos.CENTER);
    }

    public String getMessage() {
        return textField.getText();
    }

    public Parent getView() {
        return view ;
    }
}

// Scheduled Action Hook

function w3_flush_cache( ) {
    $w3_plugin_totalcache->flush_all();
}

// Schedule Cron Job Event

function w3tc_cache_flush() {
    if ( ! wp_next_scheduled( 'w3_flush_cache' ) ) {
        wp_schedule_event( current_time( 'timestamp' ), 'hourly', 'w3_flush_cache' );    
    }
}

add_action( 'wp', 'w3tc_cache_flush' );

答案 1 :(得分:0)

您可以将标签的引用传递给课程。我建议您阅读this以获取更多信息。

但是关于你的代码。我将如何修改它:

  public class Start extends Application {

  public static void main(String[] args)  {
      Application.launch(Start.class,"myClass");
  }

  @Override
  public void start(Stage primaryStage) throws Exception {
    Label label = new Label("Name:");
    TextField textField = new TextField();
    HBox hBox = new HBox();
    hBox.getChildren().addAll(label,textField);
    hBox.setSpacing(10);
    Scene scene = new Scene(hBox,300,200);
    primaryStage.setScene(scene);
    primaryStage.setTitle("Hello");
    primaryStage.show();

    textField.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
          //Handle the change in the text value here
        }
    });
  }
}

现在,在这种情况下,我删除了您的ShowOff课程,但如果您需要澄清,请告诉我。

答案 2 :(得分:0)

窗口中的TextField捕获用户输入。您可以从TextField获取文本并将其显示在任何您想要的位置。要从TextField获取当前文本,您需要使用getText()

为了学习和理解控件和布局的工作原理,我强烈建议您浏览Getting Started with JavaFX Sample Applications

这是一个小例子,它使用TextField接受用户输入,并在按下按钮时将文本打印到控制台:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class PassParameter extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Label label = new Label("Name:");
        TextField textField = new TextField();
        HBox hBox = new HBox(10, label,textField);
        hBox.setAlignment(Pos.CENTER);
        Button button = new Button("Show User Input In Console");
        // On click, print the text from the TextField in the console
        button.setOnAction( e -> System.out.println(textField.getText()));
        VBox vBox = new VBox(10, hBox, button);
        vBox.setAlignment(Pos.CENTER);
        Scene scene = new Scene(vBox,300,200);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Hello");
        primaryStage.show();
    }

    public static void main(String[] args) {
        Application.launch();
    }
}

答案 3 :(得分:-1)

要将值从一个类传递到另一个类,您需要在第一个类中声明您的变量,然后在另一个类中扩展第一个类

    class PassingVariables
{
    static int hello;
    public static void main( String[] args )
    {
        ShowOff pass = new ShowOff();

    }
}
class ShowOff extends PassingVariables
{
    ShowOff()
    {
        hello = 15;
        System.out.println("Hello = "+hello);

    }
}