自定义控制和不透明的弹出(Custom control & opaque popup)

2019-10-17 15:49发布

我在写包含自定义控制一个JavaFX库。 我已经创建了这种控制,我布置一个TextField和一个按钮自定义皮肤。 当按钮被点击一个弹出窗口应该打开。

我有麻烦的是,弹出是透明的。 我怎样才能使它不透明? 我试图配置背景的CSS,但没有成功。

相关的代码是这种自定义控件的肌肤内实行。 的CSS由自定义控制的getUserAgentStylesheet()方法被引用。 定制控件具有的styleClass“自定义控制”。

基本上,皮肤说:

  • 使对自定义控制,一个TextField和一个按钮
  • 如果此按钮(皮肤的一部分)被压:弹出另一个自定义控件的窗口(它有它自己的皮肤等)

下面是相关的代码:

 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;
}

但是,这也不能工作。

文章来源: Custom control & opaque popup