输入框(文本框)
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class TextFieldDemoWithTooltip extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
TextField textField = new TextField();
textField.setPromptText("在这里输入文本");
// 左对齐文本框
TextField leftTextField = new TextField();
leftTextField.setPromptText("左对齐");
leftTextField.setAlignment(Pos.BASELINE_LEFT);
// 右对齐文本框
TextField rightTextField = new TextField();
rightTextField.setPromptText("右对齐");
rightTextField.setAlignment(Pos.BASELINE_RIGHT);
// 添加提示文本监听和Tooltip
addPromptTextListenerAndTooltip(textField, "默认对齐");
addPromptTextListenerAndTooltip(leftTextField, "左对齐");
addPromptTextListenerAndTooltip(rightTextField, "右对齐");
HBox hbox = new HBox(10, textField, leftTextField, rightTextField);
hbox.setAlignment(Pos.CENTER);
Scene scene = new Scene(hbox, 400, 150);
primaryStage.setTitle("JavaFX 文本框演示");
primaryStage.setScene(scene);
primaryStage.show();
}
private void addPromptTextListenerAndTooltip(TextField textField, String alignment) {
// 添加提示文本监听
textField.focusedProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue && textField.getText().isEmpty()) {
textField.setPromptText("在这里输入文本");
} else {
textField.setPromptText(null);
}
});
// 添加Tooltip
Tooltip tooltip = new Tooltip("对齐方式: " + alignment);
Tooltip.install(textField, tooltip);
}
}
在这个示例中,addPromptTextListenerAndTooltip方法用于同时添加提示文本监听和Tooltip。当用户将鼠标悬停在文本框上时,会显示相应的提示信息。
获取和设置文本内容:
- getText():获取文本框的当前文本内容。
- setText(String text):设置文本框的文本内容。
TextField textField = new TextField();
String currentText = textField.getText(); // 获取文本框的当前文本内容
textField.setText("新的文本"); // 设置文本框的文本内容
获取和设置提示文本:
- getPromptText():获取文本框的提示文本。
- setPromptText(String promptText):设置文本框的提示文本。
TextField textField = new TextField();
String promptText = textField.getPromptText(); // 获取文本框的提示文本
textField.setPromptText("在这里输入文本"); // 设置文本框的提示文本
文本变化监听:
- textProperty():获取文本框的文本属性,可以添加监听器。
- textProperty().addListener((observable, oldValue, newValue) -> {...}):添加文本变化监听器。
TextField textField = new TextField();
textField.textProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("文本变化:" + newValue);
});
限制输入长度:
setMaxLength(int maxLength):设置文本框的最大长度。
TextField textField = new TextField();
textField.setMaxLength(10); // 设置文本框的最大长度为10
光标位置和选中文本:
- positionCaret(int position):设置光标位置。
- selectRange(int start, int end):选中指定范围的文本。
TextField textField = new TextField();
textField.positionCaret(5); // 设置光标位置为第5个字符
textField.selectRange(2, 7); // 选中文本的第2到第7个字符
清除文本:
clear():清除文本框的内容。
TextField textField = new TextField();
textField.clear(); // 清除文本框的内容
这些方法为你提供了在 TextField 中处理文本和用户输入的灵活性。根据具体需求,你可以选择使用适当的方法来实现相应的功能。
密码框
在JavaFX中,密码框(PasswordField)是用于接收密码输入的控件,与普通的文本框(TextField)不同,密码框的内容通常被隐藏。以下是PasswordField类的一些常用方法:
获取和设置密码内容:
- getCharacters():获取密码框的当前密码内容,返回一个ObservableList<Character>。
- setText(String text):设置密码框的密码内容。
PasswordField passwordField = new PasswordField();
ObservableList<Character> passwordChars = passwordField.getCharacters(); // 获取密码框的当前密码内容
passwordField.setText("newPassword"); // 设置密码框的密码内容
获取和设置提示文本:
- getPromptText():获取密码框的提示文本。
- setPromptText(String promptText):设置密码框的提示文本。
PasswordField passwordField = new PasswordField();
String promptText = passwordField.getPromptText(); // 获取密码框的提示文本
passwordField.setPromptText("请输入密码"); // 设置密码框的提示文本
密码变化监听:
- textProperty():获取密码框的密码属性,可以添加监听器。
- textProperty().addListener((observable, oldValue, newValue) -> {...}):添加密码变化监听器。
PasswordField passwordField = new PasswordField();
passwordField.textProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("密码变化:" + newValue);
});
限制输入长度:
- setMaxLength(int maxLength):设置密码框的最大密码长度。
PasswordField passwordField = new PasswordField();
passwordField.setMaxLength(10); // 设置密码框的最大密码长度为10
清除密码:
- clear():清除密码框的密码内容。
PasswordField passwordField = new PasswordField();
passwordField.clear(); // 清除密码框的密码内容
密码框提供了类似于文本框的方法,但由于密码通常需要保密,所以密码框的内容通常以字符列表的形式存储,而不是字符串形式。这样可以更好地保护用户的密码。
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class PasswordFieldDemo extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("JavaFX PasswordField Demo");
// 创建密码框
PasswordField passwordField = new PasswordField();
passwordField.setPromptText("请输入密码");
// 显示密码的标签
Label passwordLabel = new Label();
// 添加密码变化监听器
passwordField.textProperty().addListener((observable, oldValue, newValue) -> {
passwordLabel.setText("密码: " + newValue);
});
// 创建布局
VBox vbox = new VBox(10);
vbox.setPadding(new Insets(20, 20, 20, 20));
vbox.getChildren().addAll(passwordField, passwordLabel);
// 创建场景
Scene scene = new Scene(vbox, 300, 150);
// 设置场景
primaryStage.setScene(scene);
// 显示舞台
primaryStage.show();
}
}
标签
设置文本内容:
- setText(String text):设置标签的文本内容。
Label label = new Label();
label.setText("Hello, JavaFX!");
获取文本内容:
- getText():获取标签的当前文本内容。
Label label = new Label("Hello, JavaFX!");
String text = label.getText();
设置图形图标:
- setGraphic(Node graphic):设置标签的图形图标,可以是任何继承自Node的图形元素。
Label label = new Label();
ImageView icon = new ImageView(new Image("icon.png"));
label.setGraphic(icon);
设置字体样式:
- setFont(Font font):设置标签的字体样式。
Label label = new Label();
label.setFont(Font.font("Arial", FontWeight.BOLD, 14));
设置文本对齐方式:
- setTextAlignment(TextAlignment value):设置文本在标签中的对齐方式。
Label label = new Label();
label.setTextAlignment(TextAlignment.CENTER);
设置标签的提示信息:
- setTooltip(Tooltip value):为标签设置提示信息。
Label label = new Label();
Tooltip tooltip = new Tooltip("这是一个标签");
label.setTooltip(tooltip);
设置文本颜色:
- setTextFill(Paint value):设置文本的颜色。
Label label = new Label();
label.setTextFill(Color.BLUE);
设置标签的边距:
- setPadding(Insets value):设置标签的内边距。
Label label = new Label();
label.setPadding(new Insets(10, 20, 10, 20));
样例代码
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class LabelDemo extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("JavaFX Label Demo");
// 创建标签
Label label = new Label("Hello, JavaFX!");
// 设置字体样式
Font font = Font.font("Arial", 20);
label.setFont(font);
// 设置文本对齐方式
label.setTextAlignment(javafx.scene.text.TextAlignment.CENTER);
// 设置文本颜色
label.setTextFill(Color.DARKGREEN);
// 设置提示信息
Tooltip tooltip = new Tooltip("这是一个JavaFX标签");
label.setTooltip(tooltip);
// 创建布局
VBox vbox = new VBox(10);
vbox.setPadding(new Insets(20, 20, 20, 20));
vbox.getChildren().addAll(label);
// 创建场景
Scene scene = new Scene(vbox, 300, 150);
// 设置场景
primaryStage.setScene(scene);
// 显示舞台
primaryStage.show();
}
}