我正在重新设计 JavaFX 应用程序,但我有一个问题:disabled
风格。当我尝试改变-fx-text-fill
and -fx-opacity settings
,文本区域的文本颜色仍然比文本字段稍浅。这是我现在得到的风格:
/*** 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;
}
这是禁用的组件在程序中的样子:JavaFX 应用程序的屏幕截图 https://i.stack.imgur.com/RAZXf.png
如您所见,文本颜色TextField
is #7a7a7a
这是 50%#000
. The TextArea
但似乎有颜色#c7c7c7
这是 25%#000
.
有谁知道如何为文本区域获得与文本字段相同的禁用颜色?
这是怎么回事
IMO 当前的行为是一个错误,应提交至http://bugreport.java.com http://bugreport.java.com(我已经这样做了,不幸的是,Java 错误报告系统不提供任何方法来跟踪此错误报告,除非它被 JavaFX 团队接受)。
问题在于文本区域中文本的不透明度修改器应用了两次。默认的 TextArea 皮肤是作为 TextArea 控制节点实现的,其中有一个内部 ScrollPane,当 TextArea 被禁用时,两者的不透明度都设置为 0.4,因此文本(以及滚动窗格中的滚动条)无法显示不透明度褪色效果应用了两次(这是错误的)。您可以通过检查禁用的 TextArea 控件来看到这一点优美的风景 http://fxexperience.com/scenic-view/.
解决方法
当禁用的滚动窗格包含在文本输入控件中时,将其不透明度显式设置为 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 解决方法):
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)