web-dev-qa-db-ja.com

javafxの境界線を変更せずにTextFieldの背景色を変更するにはどうすればよいですか?

TextFieldの背景色を「colorBox0」から「value0」に変更しようとしていますが、境界線が削除されます。
これは私のコードの簡略版です。

   static Paint value0 = Paint.valueOf("FFFFFF");
   TextField colorBox0;
   colorBox0.setBackground(new Background(new BackgroundFill(value0, CornerRadii.EMPTY, Insets.EMPTY)));

どんな助けも大歓迎です
ありがとうございました

12
sazzy4o

To stringメソッドとsubstringメソッドを次のように使用すると、文字列と変数からCSSコードの文字列を作成できることがわかりました。

colorBox0
.setStyle("-fx-control-inner-background: #"+value0.toString().substring(2));
13
sazzy4o

TextFieldの(短縮された)デフォルトのJavaFXスタイルを見ると、多くのことが説明できます。

.text-input {
  -fx-background-color: linear-gradient(to bottom, derive(-fx-text-box-border, -10%), -fx-text-box-border),
    linear-gradient(from 0px 0px to 0px 5px, derive(-fx-control-inner-background, -9%), -fx-control-inner-background);
  -fx-background-insets: 0, 1;
  -fx-background-radius: 3, 2;
}

したがって、背景は境界線を含む階層化された背景です。この手法はJavaFX全体で多く使用されています。ただし、1色だけを変更するのは非常に簡単です。

最初に、新しいカスタムスタイルクラスをTextFieldに割り当てる必要があります。

TextField textField = new TextField();
textField.getStyleClass().add("custom");

cSSファイル:

.custom {
  -fx-control-inner-background: orange;
}

ご覧のとおり、テキストフィールドのすべてのスタイルをオーバーライドする必要はありません。背景に使用される色変数のみをオーバーライドするだけで十分です。

7
eckig

CSSを使用して色を設定してみてください。

TextField colorBox0;
colorBox0.setStyle("-fx-background-color: white;");
5
javaHunter

色変換を備えたエレガントなソリューション:

static Paint black = Paint.valueOf(Integer.toHexString(Color.BLACK.hashCode()));
TextField textfield;
textField.setStyle(
"-fx-control-inner-background: #"+black.toString().substring(2));
0