我正在编写一个包含自定义控件的 JavaFX 库。我已经为这个控件创建了一个自定义皮肤,我在其中布局了一个 TextField 和一个按钮。单击按钮时,应打开弹出窗口。
我遇到的麻烦是弹出窗口是透明的。我怎样才能使它不透明?我尝试在 CSS 中配置背景,但没有成功。
相关代码位于此自定义控件的 Skin 实现中。CSS 由自定义控件的 getUserAgentStylesheet() 方法引用。自定义控件具有 styleClass“自定义控件”。
基本上皮肤说:
- 将自定义控件呈现为 TextField 和 Button
- 如果这个按钮(皮肤的一部分)被按下:弹出一个带有另一个自定义控件的窗口(它有自己的皮肤等)
以下是相关代码:
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
编辑:
我设法更进一步。以下将填充弹出窗口:
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;
}
但是无论我将控件添加到弹出窗口还是主场景,它都没有改变背景!?(我不确定填充或背景是否应该起作用,我不确定是否必须设置插图以及设置什么值)。
我还尝试添加一个 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;
}
但这也不起作用。