カスタム コントロールを含む 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;
}
しかし、これもうまくいきませんでした。