Pertanyaan Bagaimana saya bisa menambahkan tooltip ke node yang tidak menerapkan Control menggunakan FXML?


Di JavaFX subclass dari Kontrol memiliki properti tooltip yang berarti bahwa seseorang dapat secara deklaratif menambahkan Keterangan alat menggunakan FXML dengan demikian:

<CheckBox fx:id="someCheckBox" mnemonicParsing="false" text="Do It?">
    <tooltip>
        <Tooltip text="Whether or not to do it."/>
    </tooltip>
</CheckBox>

Ini hanya mungkin karena Kotak centang adalah subkelas Kontrol.

Namun, saya ingin dapat menambahkan tooltip ke sembarang adegan-grafik Node menggunakan FXML (yaitu tanpa harus menambahkan tooltip secara program menggunakan Java).


6
2018-04-30 03:59


asal


Jawaban:


Ada sebuah diskusi yang diarsipkan di Forum Komunitas Oracle yang menyarankan membungkus Node di dalam a ScrollPane dan mengatur Tooltip pada ScrollPane. Ini kurang ideal karena menambahkan Node yang tidak perlu ke adegan-grafik tetapi yang lebih penting tidak berfungsi dengan baik dalam semua skenario. Pertimbangkan untuk mencoba menambahkan Tooltip ke grafik a TitledPane:

<TitledPane text="My TitledPane" fx:id="someTitledPane" expanded="true" contentDisplay="RIGHT">
    <graphic>
        <ScrollPane fitToWidth="true" fitToHeight="true" style="-fx-background-color: rgba(255, 255, 255, 0);">
            <ImageView fitWidth="24.0" fitHeight="24.0" preserveRatio="true" pickOnBounds="true">
            <image>
                <Image url="/images/questionMark.jpg" />
            </image>
            </ImageView>
        <tooltip>
            <Tooltip text="My tooltip."/>
        </tooltip>
        </ScrollPane>
    </graphic>
    <Label text="Hello!"/>
</TitledPane>

Meskipun ScrollPane memiliki latar belakang transparan, masih ada kotak putih yang terlihat di belakang grafik tanda tanya:

ScrollPane leaves white background - not ideal!

Ada cara di sekitar ini, dan itu adalah untuk memanfaatkan kekuatan <fx:script>:

<?language javascript?>

<TitledPane text="My TitledPane" fx:id="someTitledPane" expanded="true" contentDisplay="RIGHT">
    <graphic>
        <ImageView fx:id="questionMarkImageView" fitWidth="24.0" fitHeight="24.0" preserveRatio="true" pickOnBounds="true">
        <image>
            <Image url="/images/questionMark.jpg" />
        </image>
        </ImageView>
        <fx:script>
            var tooltip = new javafx.scene.control.Tooltip('My tooltip');
            javafx.scene.control.Tooltip.install(questionMarkImageView, tooltip);
        </fx:script>
    </graphic>
    <Label text="Hello!"/>
</TitledPane>

Perhatikan bahwa fx:id dari ImageView direferensikan di dalam skrip (saya tidak melihat fungsi ini didokumentasikan di mana saja dan hanya menemukannya melalui eksperimen - yang sebenarnya mendorong saya untuk memposting Q & A ini dengan harapan orang lain akan menemukannya berguna). Hasilnya terlihat seperti:

No white background and one less node in scene-graph - ideal!


5
2018-04-30 03:59