如何更改TextField的背景颜色而不更改javafx中的边框?

saz*_*y4o 12 java javafx textfield background-color javafx-2

我试图将我的TextField"colorBox0"的背景颜色更改为"value0",但它摆脱了边框.
这是我的代码的简化版本:

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

非常感谢任何帮助
谢谢

saz*_*y4o 13

我发现你可以通过使用to string方法和substring方法构造一个字符串和变量的css代码字符串,如下所示:

colorBox0
.setStyle("-fx-control-inner-background: #"+value0.toString().substring(2));
Run Code Online (Sandbox Code Playgroud)


eck*_*kig 7

查看(缩短的)默认JavaFX样式的TextField解释很多:

.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;
}
Run Code Online (Sandbox Code Playgroud)

因此背景是包含边框的分层背景.这种技术在整个JavaFX中使用很多.但是只修改一种颜色非常容易.

首先,我们需要为我们分配一个新的自定义样式类TextField:

TextField textField = new TextField();
textField.getStyleClass().add("custom");
Run Code Online (Sandbox Code Playgroud)

和CSS文件:

.custom {
  -fx-control-inner-background: orange;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,您不必覆盖文本字段的所有样式,仅覆盖用于背景的颜色变量就足够了.


jav*_*ter 5

尝试使用CSS设置颜色:

TextField colorBox0;
colorBox0.setStyle("-fx-background-color: white;");
Run Code Online (Sandbox Code Playgroud)

  • 那是行不通的。它也改变了边界。对于每个将找到此答案的人。 (2认同)