我正在编写一个包含自定义控件的JavaFX库。我为此控件创建了一个自定义外观,我在其中布局TextField和Button。 单击该按钮时,应打开一个弹出窗口。
我遇到的麻烦是Popup是透明的。我怎么能让它变得不透明?我尝试在CSS中配置背景但没有成功。
相关代码位于此自定义控件的Skin实现中。 CSS由自定义控件的getUserAgentStylesheet()方法引用。 自定义控件具有styleClass“custom-control”。
皮肤基本上说:
以下是相关代码:
public class SomeControlSkin implements Skin<SomeControl> {
private SomeControl control;
private OtherControl otherControl = new OtherControl();
private Popup popup = new Popup();
public SomeControlSkin(SomeControl someControl){
this.someControl = someControl;
otherControl.fooProperty().bind(someControl.fooProperty());
...
popupControl.getContent().add(otherControl);
...
}
...
}
和
.some-control {
-fx-skin: "somePackage.SomeControlSkin";
}
.some-control .popup{
-fx-background-color: yellow;
}
.some-control .other-control{
-fx-background-color: yellow;
}
我也尝试过使用PopupControl,但它也没有用。
注意:这是一个交叉帖子:
https://forums.oracle.com/forums/thread.jspa?messageID=10819020
修改
我设法向前迈了一小步。以下内容将填充Popup:
popupControl.getScene().setFill(Color.YELLOW);
但我怎么能用CSS做到这一点?
我甚至尝试过:
.some-control {
-fx-skin: "somePackage.SomeControlSkin";
-fx-background-color: black;
-fx-background-insets: 0;
-fx-fill: black;
}
.other-control {
-fx-skin: "somePackage.OtherControlSkin";
-fx-background-color: black;
-fx-background-insets: 0;
-fx-fill: black;
}
但无论是将控件添加到Popup还是主场景,它都没有改变背景!? (我不确定填充或背景是否可以完成这个技巧,但我不确定是否必须设置插入物以及值,但是)。
我还尝试添加一个styleClass:
popupControl.getContent().add(otherControl);
otherControl.getStyleClass().add("other-control-popup");
和
.other-control-popup {
-fx-background-color: black;
-fx-background-insets: 0;
-fx-fill: black;
}
但这也不起作用。