Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX8中文本区域的透明背景_Java_Javafx_Javafx 8 - Fatal编程技术网

JavaFX8中文本区域的透明背景

JavaFX8中文本区域的透明背景,java,javafx,javafx-8,Java,Javafx,Javafx 8,因为我使用的是JavaFX8,所以我所有的textareas都没有应用相应css中定义的透明度。它在Java7中工作得很好,但是对于JavaFX8的候选版本,我不能让它像以前那样工作 编辑: 这个问题是关于JavaFXTextArea的,而不是关于JTextArea的。 fx背景色:rgba(53,89119,0.2)不再对textarea有任何影响,虽然它的alpha值应该为0.2,但它是不透明的 这是一个已知问题吗?文本区域由几个节点组成。要使背景透明,还需要更改子窗格(文本区域、滚动窗格、

因为我使用的是JavaFX8,所以我所有的
textarea
s都没有应用相应css中定义的
透明度。它在Java7中工作得很好,但是对于JavaFX8的候选版本,我不能让它像以前那样工作

编辑: 这个问题是关于JavaFXTextArea的,而不是关于JTextArea的。
fx背景色:rgba(53,89119,0.2)
不再对textarea有任何影响,虽然它的alpha值应该为0.2,但它是不透明的


这是一个已知问题吗?

文本区域由几个节点组成。要使背景透明,还需要更改子窗格(文本区域、滚动窗格、视口、内容)的背景。这可以通过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)); // *
            }
        }
    });
同样可以通过代码来实现。该代码不应用于生产。这只是为了演示节点结构

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

.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)); // *
            }
        }
    });
TextArea TextArea=newtextarea(“我有一个难看的白色背景:-(”);
//我们不使用lambdas来创建更改侦听器,因为我们使用
//通过“this”将实例复制两次(请参见*)

textArea.skinProperty().addListener(new ChangeListener)有人给我一个提示吗?这是一个非常聪明的例子。谢谢,成功了。尽管我可以确认在JDK 1.7中没有这个功能它也能工作!只有在未选中textArea时,如何对其进行同样的操作?