TextField 类实现了一个接收和显示文本输入的UI组件。它提供了从用户接收文本输入的功能。这个类和另一个文本输入组件PasswordField一样,都继承自TextInput 类。TextInput 类是JavaFX
API中所有文本组件的超类。
package javafxui;
import javafx.scene.control.Button;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class LearnTextField extends Application{
@Override
public void start(Stage stage) {
StackPane stackPane = new StackPane();
/*@1
* 创建文本域
* 可以在任何时候通过 getText 方法获取Text Field的值
* setPrefColumnCount()是指同一时间可以显示的最大字符个数。
*
*/
Label label1 = new Label("Name:");
TextField textField = new TextField ();
HBox hb = new HBox();
hb.getChildren().addAll(label1, textField);
hb.setSpacing(10);
/*@2
* 添加Text Field到Application
* setPromptText()设置提示文本
* 提示文本和输入在Text Field中的文本的区别是提示文本无法通过getText 方法取得。
* GridPane.setConstraints(node, col, row);设置位置
*/
//创建GridPane容器
GridPane grid = new GridPane();
grid.setPadding(new Insets(10, 10, 10, 10));
grid.setVgap(5);
grid.setHgap(5);
//定义Name Text Field
final TextField name = new TextField();
name.setPromptText("Enter your first name.");
GridPane.setConstraints(name, 0, 0);
grid.getChildren().add(name);
//定义Last Name Text Field
final TextField lastName = new TextField();
lastName.setPromptText("Enter your last name.");
GridPane.setConstraints(lastName, 0, 1);
grid.getChildren().add(lastName);
//定义Comment Text Field
final TextField comment = new TextField();
comment.setPromptText("Enter your comment.");
GridPane.setConstraints(comment, 0, 2);
grid.getChildren().add(comment);
//定义Submit Button
Button submit = new Button("Submit");
//&1 GridPane.setConstraints(submit, 1, 0);
grid.add(submit, 1, 0);//可代替 &1,&2
//&2 grid.getChildren().add(submit);
//定义Clear Button
Button clear = new Button("Clear");
GridPane.setConstraints(clear, 1, 1);
grid.getChildren().add(clear);
/*@3
* 处理Text Field数据(行为)
*
* 清除信息
* name.clear()
* lastName.clear()
* comment.clear()
* label.setText(null)
*/
final Label label = new Label();
GridPane.setConstraints(label, 0, 3);
GridPane.setColumnSpan(label, 2);
grid.getChildren().add(label);
submit.setOnAction((ActionEvent e) -> {
if (
(comment.getText() != null && !comment.getText().isEmpty())
) {
label.setText(name.getText() + " " +
lastName.getText() + ", "
+ "thank you for your comment!");
} else {
label.setText("You have not left a comment.");
}
});
clear.setOnAction((ActionEvent e) -> {
name.clear();
lastName.clear();
comment.clear();
label.setText(null);
});
/*@4
* 一些用于TextField的方法
* · copy()– 将当前选中范围内的文本复制到剪切板,并保留选中的内容
* · cut()– 将当前选中范围内的文本复制到剪切板,并移除选中的内容
* · selectAll() – 选中Text Field中所有输入的文本
* · paste()– 将剪切板中的内容粘贴到这个Text Field中,并替换当前选中的内容
*
*/
Scene scene = new Scene(grid,300,300);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}