Egy egyéni vezérlőt tartalmazó JavaFX könyvtárat írok. Létrehoztam egy egyéni felületet ehhez a vezérlőhöz, ahol elhelyezek egy szövegmezőt és egy gombot. Amikor a gombra kattintunk, egy felugró ablaknak kell megnyílnia.
Az a bajom, hogy a felugró ablak átlátszó. Hogyan tudnám átlátszatlanná tenni? Megpróbáltam beállítani a hátteret a CSS-ben, de sikertelenül.
A vonatkozó kód ennek az egyéni vezérlőelemnek a Skin implementációjában található. A CSS-re az egyéni vezérlő getUserAgentStylesheet() metódusa hivatkozik. Az egyéni vezérlő a styleClass "egyéni vezérléssel" rendelkezik.
Alapvetően a Skin azt mondja:
- a cutom vezérlőt szövegmezőként és gombként jeleníti meg
- ha ezt a gombot (a Skin egy részét) megnyomják: felugrik egy ablak egy másik egyéni vezérlővel (amelynek saját Skinje van stb.)
Íme a vonatkozó kód:
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);
...
}
...
}
és
.some-control {
-fx-skin: "somePackage.SomeControlSkin";
}
.some-control .popup{
-fx-background-color: yellow;
}
.some-control .other-control{
-fx-background-color: yellow;
}
Próbáltam PopupControl-lal is, de az sem ment.
Megjegyzés: Ez egy keresztbejegyzés:
https://forums.oracle.com/forums/thread.jspa?messageID=10819020
Szerkesztés:
Sikerült egy kis lépéssel előrébb jutnom. Az előugró ablakot a következő tölti ki:
popupControl.getScene().setFill(Color.YELLOW);
De hogyan tudom ezt megtenni CSS-sel?
Ki is próbáltam:
.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;
}
De nem változtatta meg a hátteret, mindegy, hogy egy Popuphoz vagy a főjelenethez adtam hozzá a vezérlőt!? (Nem vagyok biztos benne, hogy a kitöltésnek vagy a háttérnek kell-e a trükkje, és nem vagyok biztos benne, hogy be kell-e állítani a beillesztéseket, és milyen értékre).
Megpróbáltam hozzáadni egy styleClass-t is:
popupControl.getContent().add(otherControl);
otherControl.getStyleClass().add("other-control-popup");
és
.other-control-popup {
-fx-background-color: black;
-fx-background-insets: 0;
-fx-fill: black;
}
De ez sem működött.