java - JavaFX 8 中文本区域的透明背景

标签 java javafx javafx-8

由于我使用的是 JavaFX 8,所以我的所有 textarea 都不会应用相应 css 中定义的 transparency。它在 Java 7 中运行良好,但对于 JavaFX 8 的候选版本,我无法让它像以前一样运行。

编辑: 这个问题是关于JavaFX TextArea,而不是JTextArea。
-fx-background-color: rgba(53,89,119,0.2); 对文本区域不再有任何影响,虽然它的 alpha 值为 0.2,但它是不透明的...

这是一个已知问题吗?

最佳答案

TextArea 由多个节点组成。要使背景透明,还需要更改子 Pane 的背景(TextArea、ScrollPane、ViewPort、Content)。这可以通过 CSS 来完成。

CSS 示例:

.text-area {
    -fx-background-color: rgba(53,89,119,0.4);
}

.text-area .scroll-pane {
    -fx-background-color: transparent;
}

.text-area .scroll-pane .viewport{
    -fx-background-color: transparent;
}


.text-area .scroll-pane .content{
    -fx-background-color: transparent;
}

同样可以通过代码来完成。该代码不应用于生产。它只是为了演示节点结构。

代码示例(使所有背景完全透明):

    TextArea textArea = new TextArea("I have an ugly white background :-(");
    // we don't use lambdas to create the change listener since we use
    // the instance twice via 'this' (see *)
    textArea.skinProperty().addListener(new ChangeListener<Skin<?>>() {

        @Override
        public void changed(
          ObservableValue<? extends Skin<?>> ov, Skin<?> t, Skin<?> t1) {
            if (t1 != null && t1.getNode() instanceof Region) {
                Region r = (Region) t1.getNode();
                r.setBackground(Background.EMPTY);

                r.getChildrenUnmodifiable().stream().
                        filter(n -> n instanceof Region).
                        map(n -> (Region) n).
                        forEach(n -> n.setBackground(Background.EMPTY));

                r.getChildrenUnmodifiable().stream().
                        filter(n -> n instanceof Control).
                        map(n -> (Control) n).
                        forEach(c -> c.skinProperty().addListener(this)); // *
            }
        }
    });

进一步引用:JavaFX CSS Documentation

关于java - JavaFX 8 中文本区域的透明背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56783446/

相关文章:

java - 设置ImageView图片结果报错

java - 无法实例化文档错误 Lucene 6.2.0 API

java - Android:通过存储在应用程序类中避免将 Activity 传递给单例=内存泄漏?

java - MySQL 数据库连接速度无法正常工作

javafx-maven-plugin mac pkg 安装程序不显示应用程序图标

java - Platform.runLater,处理大量任务太慢

java - 在 JavaFX TextArea 中突出显示字符串

java - 无法使用 Ant 构建 JavaFX 应用程序

java - JaxB 编码(marshal)拆收器覆盖文件内容

java - 如何允许调度鼠标事件以禁用节点?