1

我正在编写一个包含自定义控件的 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;
}

但这也不起作用。

4

0 回答 0