すずろぐ

人生大逆転を目指す、鈴木俊吾の成長日記

スポンサーリンク

JavaFX TextAreaの背景色を動的に変更する方法

こんにちは、すずしんです。

私は現在、JavaFXフリーソフトの開発をしているのですが…。 その際に、TextArea背景色変更したいなとなったのですよね。 ただ、これがなかなか上手くいかずに手間取りました…。 実際にやり方が分かると簡単なのですけどね。 そこで、同じ問題で悩んでいる方に、その方法についてシェアするために記事として残しておきます。

TextAreaの背景色の変更方法

TextAreaに限らず、JavaFXGUIのコントロールはsetStyleメソッドを使ってスタイルを指定することが出来ます。 このsetStyleメソッドの中で、「-fx-background-color」の値を指定してやると背景色を変更可能です。

gui.setStyle("-fx-background-color: red;");

ただ、TextAreaの場合、このように普通にやろうとすると背景色が変わりません。 TextAreaのボーダーの色が変わるだけでした。 本当にやりたいのは、テキストエリア全体の背景色を変更したいのですからね。 これではだめです。

そこで、私はどうしたものかと悩んでやり方を検索してみました。 そして見つけたのがlookupメソッドを介してsetStyleするというものです。 TextAreaの「.content」要素をlookupしてから、その要素に対してsetStyleしてやります。

Region region = (Region)textArea.lookup(".content");
region.setStyle("-fx-background-color: red;");

これは一行にまとめることができますね。 つまり、以下のようにも指定可能です。

textArea.lookup(".content").setStyle("-fx-background-color: red;");

ちなみに、この方法で背景色を変える場合にはちょっとした注意点があります。 それは、レイアウトが完了してからでないと設定が反映されないという事です。 すなわち、GUIを構築したStageをshowした後に指定してやる必要があります。

サンプルコード

ここでは、簡単なサンプルコードを示します。 TextAreaのみの画面を表示して、そのTextAreaの背景色を「#cccccc」に設定しています。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;

/**
 * @author Shingo Suzuki
 */
public class TextAreaSample extends Application {
    @Override
    public void start(Stage primaryStage) {
        TextArea textArea = new TextArea();
        Scene scene = new Scene(textArea, 400, 300);
        
        primaryStage.setTitle("TextArea Sample");
        primaryStage.setScene(scene);
        primaryStage.show();
        
        // 背景色の変更
        textArea.lookup(".content").setStyle("-fx-background-color: #cccccc;");
    }

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

実行結果

上記、サンプルコードを実行した結果が以下の画面のようになります。 ここでは、画面に表示されているのがテキストエリアであることが分かるように、適当なテキストを入力してみました。

JavaFX - TextAreaの背景色変更

ひとこと

TextAreaの背景色を変えるには、一度lookupメソッドを介してからsetStyleすれば良いです。 やり方が分かってしまえば簡単ですよね。 もしTextAreaの背景色を変えたい場合には、ぜひ上記の方法を試してみてくださいね。

参考

javafx textarea background color not css - Stack Overflow