试试
.text-field.error {
-fx-text-box-border: red ;
-fx-focus-color: red ;
}
第一个在不聚焦时设置边框颜色,第二个在聚焦时设置边框颜色。
在样式表text-field-red-border.css 中有这个,下面的例子可以工作:
import java.util.Collections;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class ValidatingTextFieldExample extends Application {
@Override
public void start(Stage primaryStage) {
GridPane root = new GridPane();
TextField nameTF = new TextField();
TextField emailTF = new TextField();
root.add(new Label("Name:"), 0, 0);
root.add(nameTF, 1, 0);
root.add(new Label("Email:"), 0, 1);
root.add(emailTF, 1, 1);
setUpValidation(nameTF);
setUpValidation(emailTF);
Scene scene = new Scene(root, 250, 150);
scene.getStylesheets().add(getClass().getResource("text-field-red-border.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
private void setUpValidation(final TextField tf) {
tf.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue, String newValue) {
validate(tf);
}
});
validate(tf);
}
private void validate(TextField tf) {
ObservableList<String> styleClass = tf.getStyleClass();
if (tf.getText().trim().length()==0) {
if (! styleClass.contains("error")) {
styleClass.add("error");
}
} else {
// remove all occurrences:
styleClass.removeAll(Collections.singleton("error"));
}
}
public static void main(String[] args) {
launch(args);
}
}
顺便说一句,如果您使用的是 JavaFX 8,则更喜欢伪类而不是直接设置类,因为它更简洁(您不需要检查所有丑陋的代码,只需添加一次样式类和/或删除所有出现的样式它)和更有效。要设置和取消设置伪类:
final PseudoClass errorClass = PseudoClass.getPseudoClass("error");
tfFirstName.pseudoClassStateChanged(errorClass, true); // or false to unset it
那么css应该是
.text-field:error {
-fx-text-box-border: red ;
-fx-focus-color: red ;
}
(注意-text-field 和error 之间的冒号而不是.。)