JavaFX文本框只能使用CSS更改聚焦状态

3

我试图使用JavaFX中的CSS文件更改文本字段内文本的颜色。问题是,无论我尝试什么,只有当我选择textField时才能更改颜色。

我已经尝试了文本字段的所有可更改变量,而且我也尝试分离textField的聚焦和非聚焦状态。我不知道可能的问题在哪里。

这是我的尝试: (-fx-secondary-light,-fx-text-primary是我定义的颜色。删除它们并使用十六进制值不会改变任何东西)

.textFieldSecondary {
    -fx-background-color:  -fx-secondary-light;
    -fx-text-fill: -fx-text-primary;
    -fx-prompt-text-fill: -fx-text-primary;
}

这将改变背景颜色,无论是否处于焦点状态,并且只有在我处于焦点状态时才会更改字体。
.textFieldSecondary {
    -fx-background-color:  -fx-secondary-light;
    -fx-text-fill: -fx-text-primary;
    -fx-prompt-text-fill: -fx-text-primary;
}
.textFieldSecondary:focused {
    -fx-background-color:  -fx-secondary-light;
    -fx-text-fill: -fx-text-primary;
    -fx-prompt-text-fill: -fx-text-primary;
}

同样的结果

.textFieldSecondary {
    -fx-background-color:  -fx-secondary-light;
    -fx-text-fill: -fx-text-primary;
    -fx-prompt-text-fill: -fx-text-primary;
}

如果我只关注它,它就起作用:如果我没有专注,它就完全平淡无奇,如果我专注了,所有东西都正确显示出来。

据我理解,第一种情况只应该改变非专注状态,第二种情况则应该同时改变两种状态,而第三种情况只应该改变专注状态。但是我做不到。

这是我的完整CSS文件:

* {
    -fx-white: #FFFFFF;

    -fx-primary-default: #333333;
    -fx-primary-light: #696969;

    -fx-secondary-default: #DB5A42;
    -fx-secondary-light: #DE6953;

    -fx-text-primary: #FFFFFF;
    -fx-error-primary: #FF0000;
    -fx-closeButton: #FF0000;
}

.buttonPrimary {
    -fx-background-color: -fx-primary-default;
    -fx-border-color: -fx-white;
    -fx-border-width: 3;
    -fx-border-radius: 5;
}

.buttonSecondary {
    -fx-background-color: -fx-secondary-default;
    -fx-border-color: -fx-secondary-light;
    -fx-border-width: 3;
    -fx-border-radius: 5;
}

.buttonExit {
    -fx-background-color: -fx-closeButton;
    -fx-background-radius: 0;
}

.buttonBack {
    -fx-background-color: -fx-secondary-default;
    -fx-background-radius: 0;
    -fx-background-image: url('/Resources/backArrow.png');
    -fx-background-position: center;
    -fx-background-size: 231px 68px;
}

.textFieldSecondary {
    -fx-background-color:  -fx-secondary-light;
    -fx-text-fill: -fx-text-primary;
    -fx-prompt-text-fill: -fx-text-primary;
}

.textFieldSecondaryError {
    -fx-background-color:  -fx-secondary-light;
    -fx-border-color: -fx-error-primary;
    -fx-border-width: 2;
    -fx-border-radius: 2;
    -fx-text-fill: -fx-text-primary;
}

-fx-text-primary-fx-secondary-light是什么? - Samuel Philipp
我无法重现这个问题。即使文本框没有焦点,使用.text-field { -fx-background-color: red; -fx-text-fill: blue; -fx-prompt-text-fill: green; }也能按预期工作。 - Samuel Philipp
我添加了整个CSS文件,也许有错误吗?除了文本字段之外的所有内容都可以正常工作。 - Tobias
好的,显然当我创建一个新的FXML并在那里尝试时它可以工作,所以这一定是我的某个FXML出了问题。我使用Java 12。 - Tobias
我重新做了整个文件,现在它可以工作了,不知道是什么原因导致的。谢谢你的努力! - Tobias
显示剩余3条评论
1个回答

1
尝试使用代码实现
这是一种在JAVAFX文本字段中更改内部文本填充颜色的简单方法。
private void setTextColor() {
    txtReferance.setStyle("-fx-text-inner-color: red;");
    txtName.setStyle("-fx-text-inner-color: red;");
    txtNIC.setStyle("-fx-text-inner-color: red;");
    txtMobileNo.setStyle("-fx-text-inner-color: red;");
    txtEmail.setStyle("-fx-text-inner-color: red;");
}

你可以在初始化或构造函数中调用setTextColor()方法,并将txtReferance、txtName、txtNIC、txtMobileNo和txtEmail作为文本字段的ID。

或者使用CSS

-fx-text-inner-color: red;

这对我有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接