【问题标题】:Transparent background of a textarea in JavaFX 8JavaFX 8 中文本区域的透明背景
【发布时间】:2014-02-21 14:02:23
【问题描述】:

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

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

这是一个已知问题吗?

【问题讨论】:

  • 有人给我提示吗?

标签: java javafx javafx-8


【解决方案1】:

TextArea 由几个节点组成。要使背景透明,还需要更改子窗格的背景(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

【讨论】:

  • 这是一个非常聪明的例子。
  • 谢谢,成功了。虽然我可以确认它在 JDK 1.7 中没有这个也可以工作!
  • TextArea 不被选中时如何做同样的事情?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多