Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Textarea javaFx Color

I'm trying to develop an app that looks like a terminal console, am using a TextArea for that and my wish is to habe a black background and green text,

The point I want to do this without using any ccs template

I know that my question can look like a duplicated in here:

javafx textarea background color not css

or

JavaFX CSS styling of TextArea does not work

but after reading those and trying what they suggested I found no luck to solve my issue

What I tried so far (Unsuccessfully):

in the FXML:

<TextArea 
    fx:id="terminalTextArea"
    layoutX="14.0"
    layoutY="85.0"
    prefHeight="64.0"
    prefWidth="402.0"
    style="-fx-font-family: Consolas; -fx-highlight-fill: #00ff00; -fx-highlight-text-fill: #000000; -fx-text-fill: #00ff00; -fx-background-color:#000000;"
    text="Terminal"
    AnchorPane.leftAnchor="10.0"
    AnchorPane.rightAnchor="10.0">
    <font>
        <Font name="System Bold" size="14.0" />
    </font>
</TextArea>

and in the source-code:

@Override
public void initialize(URL url, ResourceBundle rb) {
    System.out.println("init here");
    terminalTextArea.setStyle("-fx-text-fill: black;");
}

The only thing that I get is a bordered color like in the image below:

enter image description here

like image 337
ΦXocę 웃 Пepeúpa ツ Avatar asked Apr 05 '16 10:04

ΦXocę 웃 Пepeúpa ツ


People also ask

How do you change the color of text in Javafx?

You can change the font size and color of the text using the setFont() method. This method accepts an object of the Font class. The class named Font of the package javafx.

How do I change the text color in a Javafx label?

Use the setStyle() Method to Color Texts Label in Java In the line lbl. setStyle("-fx-text-fill: red; -fx-background-color: yellow"); , we applied some additional CSS properties to the label by using setStyle() method.

How do I bold a label in Javafx?

To make the text look bold, use the FontWeight constant of the font method as shown in Example 8. t. setFont(Font. font("Verdana", FontWeight.


1 Answers

The recommended way is to use an external CSS file, as in the examples you linked.

If for some reason you don't want to do that, try

style="-fx-control-inner-background:#000000; -fx-font-family: Consolas; -fx-highlight-fill: #00ff00; -fx-highlight-text-fill: #000000; -fx-text-fill: #00ff00; "

in your FXML file, or equivalently

terminalTextArea.setStyle("-fx-control-inner-background:#000000; -fx-font-family: Consolas; -fx-highlight-fill: #00ff00; -fx-highlight-text-fill: #000000; -fx-text-fill: #00ff00; ");

in your controller's initialize() method.

SSCCE:

StyledTextArea.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.HBox?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.text.Font?>

<HBox xmlns:fx="http://javafx.com/fxml/1" >
    <padding>
        <Insets top="12" left="12" right="12" bottom="12"/>
    </padding>
    <TextArea 
        prefHeight="64.0"
        prefWidth="402.0"
        style="-fx-control-inner-background:#000000; -fx-font-family: Consolas; -fx-highlight-fill: #00ff00; -fx-highlight-text-fill: #000000; -fx-text-fill: #00ff00; "
        text="Terminal">

        <font>
            <Font name="System Bold" size="14.0" />
        </font>
    </TextArea>
</HBox>

and a test class:

import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class StyledTextArea extends Application {

    @Override
    public void start(Stage primaryStage) throws IOException {
        primaryStage.setScene(new Scene(
            FXMLLoader.load(getClass().getResource("StyledTextArea.fxml"))
        ));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

enter image description here

like image 149
James_D Avatar answered Sep 24 '22 06:09

James_D