Frage JavaFX Ändere die Textfarbe des deaktivierten Textfelds in CSS


Ich habe ein texfield in einer Phase:

@FXML
private TextField tfAdUsername;

tfAdUsername.setPromptText(userName);
tfAdUsername.setDisable(true);

Die Textfarbe ist hellgrau, ich möchte sie in schwarz ändern:

.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;
}

Dies ändert nicht die Textfarbe. Was ist die richtige CSS-Eigenschaft, die verwendet werden soll?


5
2018-02-19 11:02


Ursprung


Antworten:


Der Grund, warum die Farbe beim Deaktivieren grau wird, liegt in der Änderung der Deckkraft. Versuchen Sie einfach, die folgende CSS in Ihr Textfeld einzufügen.

-fx-opacity: 1.0;

Arbeitsbeispiel (unter Verwendung von 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
2018-02-19 11:10



Um die Opazität zu ändern, verwenden Sie:

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

in der CSS-Datei.


Um die verwendete Textfarbe zu ändern (nachdem ich die Frage richtig gelesen habe, weiß ich, dass das nicht gefragt wurde.)

Aus dem Stylesheet modena.css:

.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;
}

Beispielsweise:

   @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();
}

Und die Farbe des Textes im Textfeld wird rosa? Lila?

Dies ist übrigens kein Mittel, um die Farbe für jedes Textfeld einzeln zu ändern, wenn Sie dies für die Wurzel ändern, dann verwenden alle Textfelder diese Farbe anstelle des üblichen Schwarz. Ich weiß nicht, wie man die Farbe für ein Textfeld in blau und für ein anderes in der gleichen Anwendung in rot ändert.


2
2018-02-19 13:08