我正在重新设计JavaFX应用程序,但我遇到了:disabled
样式的问题。当我尝试更改-fx-text-fill
和-fx-opacity settings
时,textareas的文本颜色仍然比文本字段略轻。这就是我现在的风格:
/*** Text Fields and Areas ***/
.text-field,
.text-area {
-fx-text-fill: #000;
-fx-opacity: 1.0;
}
.text-field:disabled,
.text-area:disabled {
-fx-text-fill: #000;
-fx-opacity: 0.5;
}
这是禁用的组件在程序中的外观: Screenshot from the JavaFX application
如您所见,TextField
的文字颜色为#7a7a7a
,是#000
的50%。然而,TextArea
的颜色#c7c7c7
似乎是#000
的25%。
有没有人知道如何为textareas和textfields获得相同的禁用颜色?
答案 0 :(得分:6)
进行了什么
IMO当前的行为是一个错误,应该在http://bugreport.java.com提交(我已经这样做了,遗憾的是Java错误报告系统没有提供任何方法来跟踪这个错误报告,除非它被JavaFX团队接受)。
问题是文本区域中文本的不透明度修改器应用了两次。默认的TextArea外观实现为TextArea控件节点,其中包含内部ScrollPane,并且当禁用TextArea时,两者的不透明度设置为0.4,因此文本(以及滚动窗格中的滚动条)具有残疾不透明度褪色效果应用两次(这是错误的)。您可以通过检查ScenicView中的已禁用TextArea控件来查看此内容。
解决方法
当文本输入控件中包含禁用的滚动窗格的不透明度时,将其显式设置为1。
.text-input > .scroll-pane:disabled {
-fx-opacity: 1;
}
示例应用:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import org.scenicview.ScenicView;
public class DisabilityAssistance extends Application {
@Override
public void start(Stage stage) throws Exception{
TextArea area = new TextArea("Text Area");
area.setDisable(true);
TextField field = new TextField("Text Field");
field.setDisable(true);
Scene scene = new Scene(new VBox(10, area, field));
stage.setScene(scene);
stage.show();
scene.getStylesheets().add(getClass().getResource(
"disability.css"
).toURI().toURL().toExternalForm());
ScenicView.show(stage.getScene());
}
public static void main(String[] args) {
launch(args);
}
}
输出(未应用CSS解决方法):
输出(应用CSS解决方法):