1

カスタム コントロールを含む JavaFX ライブラリを作成しています。TextField と Button をレイアウトするこのコントロールのカスタム スキンを作成しました。ボタンがクリックされると、ポップアップ ウィンドウを開く必要があります。

私が抱えている問題は、ポップアップが透明であることです。どうすれば不透明にできますか?CSS で背景を設定しようとしましたが、成功しませんでした。

関連するコードは、このカスタム コントロールのスキン実装内にあります。CSS は、カスタム コントロールの getUserAgentStylesheet() メソッドによって参照されます。カスタム コントロールには styleClass "custom-control" があります。

基本的に、スキンは次のように述べています。

  • カスタム コントロールを 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