我正在尝试创建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)
{
}
}
我该如何实现?
答案 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);
}
}