如何在不更改 javafx 边框的情况下更改 TextField 的背景颜色?

Posted

技术标签:

【中文标题】如何在不更改 javafx 边框的情况下更改 TextField 的背景颜色?【英文标题】:How do you change the background color of a TextField without changing the border in javafx? 【发布时间】:2015-02-26 07:07:18 【问题描述】:

我正在尝试将我的 TextField“colorBox0”的背景颜色更改为“value0”,但它摆脱了边框。 这是我的代码的简化版本:

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

非常感谢任何帮助 谢谢

【问题讨论】:

哇,这令人沮丧... 【参考方案1】:

带有颜色转换的优雅解决方案:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

你从哪里找到“-fx-control-inner-background”的?官方参考在哪里?谢谢 docs.oracle.com/cd/E17802_01/javafx/javafx/1.3/docs/api/…【参考方案3】:

查看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 中被大量使用。但是只修改一种颜色很容易。

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

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

和 CSS 文件:

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

如您所见,您不必覆盖文本字段的所有样式,只需覆盖用于背景的颜色变量即可。

【讨论】:

有没有办法将背景颜色设置为 value0 的值,因为我希望能够更改 value0 进而更改背景颜色 以编程方式更改这将重置所有背景颜色。但是您也可以在运行时通过 CSS 更改颜色。例如通过更改样式类或伪类状态。 我使用了你的 CSS 的修改版本来修复它【参考方案4】:

尝试使用 CSS 设置颜色:

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

【讨论】:

那行不通。它也改变了边界。对于所有将找到此答案的人。 正如 OP 发现的那样,使用 -fx-control-inner-background 而不是 -fx-background-color 是可行的。

以上是关于如何在不更改 javafx 边框的情况下更改 TextField 的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不做任何更改的情况下在 Android 手机中运行 JavaFX 桌面应用程序? [复制]

在不更改边框颜色的情况下更改 GridView 单元格中的文本颜色

如何在不更改链接结构的情况下使用 \ 转义字符 (、)、[、]、*、_、:[]()

在不更改应用样式的情况下更改 QSpinBox 箭头大小

如何在不使用android中的图像的情况下增加复选框边框

如何在不更改输入内容的情况下更改输入值