尝试将标签文本设置为文本字段输入
Trying to set a lable text to a textfields input
我和我的朋友正在尝试做一个测验,我们都是编程新手,我们遇到的问题是我们无法从 namnSpelare1.setPromptText("Spelare 1"); 获得输入。设置为 label5 文本。这是我们尝试用“ label5.setText("Fråga till " + namnSpelare1.getText() + "."); 做的行,但它不起作用。
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import com.sun.javafx.scene.LayoutFlags;
import javax.swing.*;
import java.beans.beancontext.BeanContext;
public class Main extends Application {
TextField namnSpelare1 = new TextField();
TextField namnSpelare2 = new TextField();
TextField namnSpelare3 = new TextField();
TextField namnSpelare4 = new TextField();
Label label5 = new Label("");
Stage window;
Scene scene1, scene2, scene3, scene4;
Button buttonRoles, buttonStart, buttonBack1, buttonBack2, buttonDone1, ButtonBack3;
LayoutFlags layout1, layout2, layout3, layout4;
@Override
public void init() throws Exception { //Vad som händer innan programmet startat.
System.out.println("Before");
}
@Override
public void start(Stage primaryStage) throws Exception {
//Vad som händer när programmet startar.
window = primaryStage;
//Sidan "START"
Label label1 = new Label("Vällkommen till Quizera!");
label1.setFont(new Font("Arial", 18));
buttonStart = new Button("START");
buttonRoles = new Button("REGLER");
buttonRoles.setOnAction(e -> window.setScene(scene2));
buttonStart.setOnAction(e -> window.setScene(scene3));
VBox layout1 = new VBox(20);//Radavstånd
layout1.setPadding(new Insets(30, 50, 100, 185)); //Tak, Höger Vägg, Golvet, Vänster Vägg
buttonStart.setPadding(new Insets(30, 88.5, 30, 88.5));
buttonRoles.setPadding(new Insets(30, 85, 30, 85));
layout1.getChildren().addAll(label1, buttonStart, buttonRoles);
scene1 = new Scene(layout1, 600, 300);
//Sidan "Regler"
Label label2 = new Label("Regler");
label2.setFont(new Font("Arial", 18));
Label label4 = new Label("Den spelare som först får 7 rätt vinner.");
label4.setFont(new Font("Arial", 11));
Button buttonBack1 = new Button("TILLBAKA");
buttonBack1.setOnAction(e -> window.setScene(scene1));
VBox layout2 = new VBox(20);
layout2.setPadding(new Insets(30, 50, 100, 185)); //Tak, Höger Vägg, Golvet, Vänster Vägg
buttonBack1.setPadding(new Insets(10, 88.5, 10, 88.5));
layout2.getChildren().addAll(label2, label4, buttonBack1);
scene2 = new Scene(layout2, 600, 300);
window.setScene(scene1);
window.setTitle("Quizera");
window.show();
//Creating a GridPane container
GridPane grid = new GridPane();
grid.setPadding(new Insets(10, 10, 10, 10));
grid.setVgap(5);
grid.setHgap(5);
//Sidan "Spelarnas namn?"
Label label3 = new Label("Fyll i spelarnas namn.");
label3.setFont(new Font("Arial", 18));
namnSpelare1.setPromptText("Spelare 1");
namnSpelare2.setPromptText("Spelare 2");
namnSpelare3.setPromptText("Spelare 3");
namnSpelare4.setPromptText("Spelare 4");
//Button button = new Button("TILLBAKA");
Button buttonDone1 = new Button("KLAR");
Button buttonBack2 = new Button("TILLBAKA");
buttonBack2.setOnAction(e -> window.setScene(scene1));
buttonDone1.setOnAction(e -> window.setScene(scene4));
VBox layout3 = new VBox(12);
buttonBack2.setPadding(new Insets(8, 88.5, 8, 88.5));
buttonDone1.setPadding(new Insets(8, 100, 8, 100));
layout3.setPadding(new Insets(18, 185, 100, 185));//Tak, Höger Vägg, Golvet, Vänster Vägg
layout3.getChildren().addAll(label3, namnSpelare1, namnSpelare2, namnSpelare3, namnSpelare4, buttonDone1, buttonBack2);
scene3 = new Scene(layout3, 600, 300);
//Fråga 1
int randomNum = (int)(Math.random() * 3);
String[] questions = {"Vilken färg har ett blåbär?", "Vad heter Isabel?", "Hur hög är en två meter hög låda"};
String[] answers = {"blå", "isabel", "två meter"};
String namn1 = (namnSpelare1.getText());
Label label6 = new Label(questions[randomNum]);
label5.setFont(new Font("Arial", 11));
Button buttonBack3 = new Button("TILLBAKA");
label5.setText("Fråga till " + namnSpelare1.getText() + ".");
buttonBack3.setOnAction(e -> window.setScene(scene3));
VBox layout5 = new VBox(20);
layout5.setPadding(new Insets(30, 50, 100, 185)); //Tak, Höger Vägg, Golvet, Vänster Vägg
//StackPane layout5 = new StackPane();
layout5.getChildren().addAll(label5, label6, buttonBack3);
scene4 = new Scene(layout5, 600, 300);
window.setTitle("Quizera");
window.show();
}
//Vad som händer efter programmet stängts ner.
public void stop() throws Exception {
System.out.println("After");
}
public static void main (String[] args) {
launch();
}
}
JavaFX 等 GUI 框架 event driven。 TextField 文本是动态的并且可以更改,生成一个您可以对其执行操作的事件。
当 TextField 文本更改时,更新 Label 文本以匹配新值。
您可以使用事件处理程序或绑定来执行此操作。
事件处理(属性改变监听器)解决方案
见
namnSpelare1.textProperty().addListener((observable, oldValue, newValue) ->
label5.setText("Fråga till " + ((newValue != null) ? newValue : "") + ".")
);
绑定解决方案
见Javafx concatenation of multiple StringProperty
label5.textProperty().bind(
Bindings.concat(
"Fråga till ", namnSpelare1.textProperty(), "."
)
);
注意上面语句中的,
用法而不是+
,这很重要...
关于 properties and binding 的背景文档。
我和我的朋友正在尝试做一个测验,我们都是编程新手,我们遇到的问题是我们无法从 namnSpelare1.setPromptText("Spelare 1"); 获得输入。设置为 label5 文本。这是我们尝试用“ label5.setText("Fråga till " + namnSpelare1.getText() + "."); 做的行,但它不起作用。
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import com.sun.javafx.scene.LayoutFlags;
import javax.swing.*;
import java.beans.beancontext.BeanContext;
public class Main extends Application {
TextField namnSpelare1 = new TextField();
TextField namnSpelare2 = new TextField();
TextField namnSpelare3 = new TextField();
TextField namnSpelare4 = new TextField();
Label label5 = new Label("");
Stage window;
Scene scene1, scene2, scene3, scene4;
Button buttonRoles, buttonStart, buttonBack1, buttonBack2, buttonDone1, ButtonBack3;
LayoutFlags layout1, layout2, layout3, layout4;
@Override
public void init() throws Exception { //Vad som händer innan programmet startat.
System.out.println("Before");
}
@Override
public void start(Stage primaryStage) throws Exception {
//Vad som händer när programmet startar.
window = primaryStage;
//Sidan "START"
Label label1 = new Label("Vällkommen till Quizera!");
label1.setFont(new Font("Arial", 18));
buttonStart = new Button("START");
buttonRoles = new Button("REGLER");
buttonRoles.setOnAction(e -> window.setScene(scene2));
buttonStart.setOnAction(e -> window.setScene(scene3));
VBox layout1 = new VBox(20);//Radavstånd
layout1.setPadding(new Insets(30, 50, 100, 185)); //Tak, Höger Vägg, Golvet, Vänster Vägg
buttonStart.setPadding(new Insets(30, 88.5, 30, 88.5));
buttonRoles.setPadding(new Insets(30, 85, 30, 85));
layout1.getChildren().addAll(label1, buttonStart, buttonRoles);
scene1 = new Scene(layout1, 600, 300);
//Sidan "Regler"
Label label2 = new Label("Regler");
label2.setFont(new Font("Arial", 18));
Label label4 = new Label("Den spelare som först får 7 rätt vinner.");
label4.setFont(new Font("Arial", 11));
Button buttonBack1 = new Button("TILLBAKA");
buttonBack1.setOnAction(e -> window.setScene(scene1));
VBox layout2 = new VBox(20);
layout2.setPadding(new Insets(30, 50, 100, 185)); //Tak, Höger Vägg, Golvet, Vänster Vägg
buttonBack1.setPadding(new Insets(10, 88.5, 10, 88.5));
layout2.getChildren().addAll(label2, label4, buttonBack1);
scene2 = new Scene(layout2, 600, 300);
window.setScene(scene1);
window.setTitle("Quizera");
window.show();
//Creating a GridPane container
GridPane grid = new GridPane();
grid.setPadding(new Insets(10, 10, 10, 10));
grid.setVgap(5);
grid.setHgap(5);
//Sidan "Spelarnas namn?"
Label label3 = new Label("Fyll i spelarnas namn.");
label3.setFont(new Font("Arial", 18));
namnSpelare1.setPromptText("Spelare 1");
namnSpelare2.setPromptText("Spelare 2");
namnSpelare3.setPromptText("Spelare 3");
namnSpelare4.setPromptText("Spelare 4");
//Button button = new Button("TILLBAKA");
Button buttonDone1 = new Button("KLAR");
Button buttonBack2 = new Button("TILLBAKA");
buttonBack2.setOnAction(e -> window.setScene(scene1));
buttonDone1.setOnAction(e -> window.setScene(scene4));
VBox layout3 = new VBox(12);
buttonBack2.setPadding(new Insets(8, 88.5, 8, 88.5));
buttonDone1.setPadding(new Insets(8, 100, 8, 100));
layout3.setPadding(new Insets(18, 185, 100, 185));//Tak, Höger Vägg, Golvet, Vänster Vägg
layout3.getChildren().addAll(label3, namnSpelare1, namnSpelare2, namnSpelare3, namnSpelare4, buttonDone1, buttonBack2);
scene3 = new Scene(layout3, 600, 300);
//Fråga 1
int randomNum = (int)(Math.random() * 3);
String[] questions = {"Vilken färg har ett blåbär?", "Vad heter Isabel?", "Hur hög är en två meter hög låda"};
String[] answers = {"blå", "isabel", "två meter"};
String namn1 = (namnSpelare1.getText());
Label label6 = new Label(questions[randomNum]);
label5.setFont(new Font("Arial", 11));
Button buttonBack3 = new Button("TILLBAKA");
label5.setText("Fråga till " + namnSpelare1.getText() + ".");
buttonBack3.setOnAction(e -> window.setScene(scene3));
VBox layout5 = new VBox(20);
layout5.setPadding(new Insets(30, 50, 100, 185)); //Tak, Höger Vägg, Golvet, Vänster Vägg
//StackPane layout5 = new StackPane();
layout5.getChildren().addAll(label5, label6, buttonBack3);
scene4 = new Scene(layout5, 600, 300);
window.setTitle("Quizera");
window.show();
}
//Vad som händer efter programmet stängts ner.
public void stop() throws Exception {
System.out.println("After");
}
public static void main (String[] args) {
launch();
}
}
JavaFX 等 GUI 框架 event driven。 TextField 文本是动态的并且可以更改,生成一个您可以对其执行操作的事件。
当 TextField 文本更改时,更新 Label 文本以匹配新值。
您可以使用事件处理程序或绑定来执行此操作。
事件处理(属性改变监听器)解决方案
见
namnSpelare1.textProperty().addListener((observable, oldValue, newValue) ->
label5.setText("Fråga till " + ((newValue != null) ? newValue : "") + ".")
);
绑定解决方案
见Javafx concatenation of multiple StringProperty
label5.textProperty().bind(
Bindings.concat(
"Fråga till ", namnSpelare1.textProperty(), "."
)
);
注意上面语句中的,
用法而不是+
,这很重要...
关于 properties and binding 的背景文档。