JavaFX Change textbox color with CSS disable

I have texfield in stage:

@FXML private TextField tfAdUsername; tfAdUsername.setPromptText(userName); tfAdUsername.setDisable(true); 

The text color is lightgray, I want to change it to black:

 .text-field:readonly { -fx-background-color: #E0E0E2; -fx-border-color: #94BBDA; -fx-text-fill: #000000; } .text-field:disabled { -fx-background-color: #E0E0E2; -fx-border-color: #94BBDA; -fx-text-fill: #000000; } 

This does not change the color of the text. What is the proper CSS property to use?

+5
source share
2 answers

The reason that the color turns gray when turned off is caused by a change in opacity. Just try adding the following css to the text box.

 -fx-opacity: 1.0; 

Working example (using setStyle ())

 public class KeyStroke extends Application { @Override public void start(Stage primaryStage) { Pane root = new Pane(); TextField textField = new TextField("Itachi"); textField.setDisable(true); textField.setStyle("-fx-opacity: 1.0;"); root.getChildren().add(textField); Scene scene = new Scene(root, 200, 200); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } 
+9
source

To change the use of opacity:

 .text-input:disabled { -fx-opacity: 1.0; } 

in the css file.


To change the color text used (after I read the question correctly, I know they didn't ask this.)

From the modena.css stylesheet:

 .root { /* Used for the inside of text boxes, password boxes, lists, trees, and * tables. See also -fx-text-inner-color, which should be used as the * -fx-text-fill value for text painted on top of backgrounds colored * with -fx-control-inner-background. */ -fx-control-inner-background: derive(-fx-base,80%); /* Version of -fx-control-inner-background for alternative rows */ -fx-control-inner-background-alt: derive(-fx-control-inner-background,-2%); /* One of these colors will be chosen based upon a ladder calculation * that uses the brightness of a background color. Instead of using these * colors directly as -fx-text-fill values, the sections in this file should * use a derived color to match the background in use. See also: * * -fx-text-base-color for text on top of -fx-base, -fx-color, and -fx-body-color * -fx-text-background-color for text on top of -fx-background * -fx-text-inner-color for text on top of -fx-control-inner-color * -fx-selection-bar-text for text on top of -fx-selection-bar */ } 
 .root { -fx-text-inner-color: #FF01F3; } 

For instance:

  @Override public void start(Stage primaryStage) { VBox root = new VBox(); root.setAlignment(Pos.CENTER); Button btn = new Button(); TextField text= new TextField(); btn.setText("Press me!"); btn.setOnAction((ActionEvent event) -> { text.setText("Goodbye World"); }); root.getChildren().addAll(btn, text); Scene scene = new Scene(root, 300, 250); scene.getStylesheets().addAll(getClass().getResource("css.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.show(); } 

And the color of the text in the text box will be pink? purple?

This is not a way to change the color for each text field separately, if you change it for the root, then all text fields will use this color instead of the usual black. I do not know how to change the color for one text field to blue, and for another in the same application - red.

+1
source

Source: https://habr.com/ru/post/1213704/


All Articles