javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ

Javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. metanit java. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-metanit java. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° metanit java. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ html- ΠΈΠ»ΠΈ xml-Ρ„Π°ΠΉΠ», Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ скобки.

Π€Π°ΠΉΠ» начинаСтся с Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ xml, которая ΡƒΠΊΠ°Π·Π²Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ xml ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ.

Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ классы ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Π² Ρ„Π°ΠΉΠ»Π°Ρ… java ΠΏΠ΅Ρ€Π΅Π΄ использованиСм классов Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ°:

Π’Π°ΠΊ ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ fxml Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ классы:

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ всС классы ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.lang, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ класс javafx.scene.control.Button. Если ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ классы, Ρ‚ΠΎ соотвСтствСнно Π½Π΅ смоТСм ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² FXML.

ПослС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° опрСдСляСтся собствСнно графичСский интСрфСйс. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Ρƒ нас ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΎΠ΄Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ½ΠΎΠΏΠΊΠ° прСдставляСт класс Button, Ρ‚ΠΎ соотвСтствСнно элСмСнт Ρ‚Π°ΠΊΠΆΠ΅ называСтся Button. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ назваиями элСмСнтов ΠΈ классов Π΅ΡΡ‚ΡŒ соотвСтствиС ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. ЀактичСски Ρ‚Π΅ΠΌ самым ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Button.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² элСмСнта Button ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ свойства создаваСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Button.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ основной класс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» FXML:

ΠœΠ΅Ρ‚ΠΎΠ΄ FXMLLoader.load() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Parent, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Scene, ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ интСрфСйс ΠΈΠ· fxml.

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. 2.14. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-2.14. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 2.14. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ прилоТСния:

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. 2.9. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-2.9. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 2.9. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрфСйса ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ прСимущСством FXML являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° fxml Π±Π΅Π· пСрСкомпиляции прилоТСния. НапримСр, Ρ‡ΡƒΡ‚ΡŒ услоТним Ρ„Π°ΠΉΠ» Main.fxml :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ помСстили ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Group. ΠŸΡ€ΠΈ этом Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Достаточно ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

JavaFX: класс Controller и fx:id в FXML

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. vneghkiq8ryijvcrkesdjadmrp8. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-vneghkiq8ryijvcrkesdjadmrp8. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° vneghkiq8ryijvcrkesdjadmrp8. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

МнС каТСтся, Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… статСй Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΠΏΠΎΡΠ²ΡΡ‰Π°ΡŽΡ‚ ΠΈ Π΄Π²ΡƒΡ… слов самому ΠΆΠΈΠ²ΠΎΡ‚Ρ€Π΅ΠΏΠ΅Ρ‰ΡƒΡ‰Π΅ΠΌΡƒ вопросу ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JavaFX, Π½ΠΎ ΠΈ посвятив, всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. А вопрос Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ: ΠΊΠ°ΠΊ Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ связь Π²Π°ΡˆΠΈΡ… node ΠΏΠΎ ΠΈΡ… fx:id ΠΈ вашСго ΠΊΠΎΠ΄Π°. Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ€Π°Π·Π½Ρ‹Ρ… частях ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ваш ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс? Π’ΠΎΡ‚ Π½Π° это, я ΠΈ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ fx:id ΠΈ с Ρ‡Π΅ΠΌ Π΅Π³ΠΎ Сдят

По ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, для Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² статСй ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π° StackOverFlow Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ попросту Π½Π΅ понятно для читатСля, ΠΊΠ°ΠΊ происходит связь fx:id ссылок с вашим ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ. А Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, Π²ΠΎΠΎΠ±Ρ‰Π΅ большС ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° магию, этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ я ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ упомяну Π½ΠΈΠΆΠ΅.

Π’ΠΎΠΎΠ±Ρ‰Π΅, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ (особСнно Π½Π° английском), Ρ‚Π°ΠΊ ΠΆΠ΅, Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π° всС Π½Π° StackOverFlow. Но, практичСски Π½ΠΈΠ³Π΄Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎ Π½Π΅ сказано, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с fx:id, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ опрСдСляСм Π² FXML Ρ„Π°ΠΉΠ»Π΅. Π›ΠΈΡˆΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠ΅ упоминания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят ΠΊ Π΅Ρ‰Π΅ большСй ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅ Π² Π³ΠΎΠ»ΠΎΠ²Π΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΈΡˆΡƒΡ‚ «Π·Π°Π΄Π°ΠΉΡ‚Π΅ вашСй node Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²Π°ΠΌ fx:id ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π²Π°ΠΌ ΡΡ‡Π°ΡΡ‚ΡŒΠ΅».

К соТалСнию, ΡΡ‡Π°ΡΡ‚ΡŒΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π‘ΡƒΠ΄Π΅Ρ‚ NullPointerException. По ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ использования, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ΄Π΅Ρ‚ ΠΈΠ· нСпонимания области видимости, скаТСм Ρ‚Π°ΠΊ, этих id. И я Ρ…ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ получаСтся exception, Π° Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ваш FXML с классом-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ ΠΈ java-ΠΊΠΎΠ΄ΠΎΠΌ. НадСюсь, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ людям ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅Ρ… ΠΌΡƒΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡˆΠ΅Π» я Π² поисках ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ вопрос.

Π― Π±Ρ‹ Π½Π°Π²Π΅Ρ€Π½ΠΎ ΠΈ ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ ΠΎΡ‚Π²Π΅Ρ‚Ρƒ сам, Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ, Π½ΠΎ спустя ΠΌΠ½ΠΎΠ³ΠΈΠ΅ часы Π΄Π½ΠΈ поиска, я наткнулся Π½Π° ΡΡ‚Π°Ρ‚ΡŒΡŽ. Π’ Π½Π΅ΠΉ рассказано ΠΏΡ€ΠΎ MVC модСль, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π° JavaFX. НС стану ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ написанноС Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅, Ρ‚Π°ΠΌ достаточноС описаниС этой ΠΌΠΎΠ΄Π΅Π»ΠΈ. Если Π²Ρ‹ ΠΎ Π½Π΅ΠΉ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ, Ρ‚ΠΎ ΠΊ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ работая с javaFX Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· FXML, Π½Π° чистом java ΠΊΠΎΠ΄Π΅, Π½ΠΎ Π½Π΅ стоит. Π’Π°ΠΊ ΠΆΠ΅, Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ пояснСниС, ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΆΠΈΡ‚ΡŒ fx:id, Π½ΠΎ я всС ΠΆΠ΅ Ρ…ΠΎΡ‡Ρƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ своими наблюдСниями ΠΈ знаниями Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

МодСль эта, кстати, Π½Π΅ Ρ‚Π°ΠΊ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°, Π΄Π°ΠΆΠ΅ Ссли ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π° Oracle. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, я Π½Π΅ нашСл Ρƒ Oracle, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с fx:id. Π—Π°Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ экспСримСнтировал, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ пониманию, ΠΊΠ°ΠΊ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π˜Ρ‚Π°ΠΊ, с прСдисловиСм ΠΏΠΎΡ€Π° Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ, ΠΊ Π΄Π΅Π»Ρƒ.

Π§Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² ΡΡ‚Π°Ρ‚ΡŒΡΡ…? ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°Ρ…, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π² FXML ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ Π΄ΠΈΠ·Π°ΠΉΠ½ прилоТСния, послС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ класс-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ Application, Π² Π½Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ start() (ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π² классС Main, Ρ€Π°Π·Π½Ρ‹Π΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹) ΠΈ Ρ‚Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вашими fx:id. И это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Казалось Π±Ρ‹, Ρ‡ΡƒΠ΄Π½Π΅Π½ΡŒΠΊΠΎ, всС Ρ‚Π°ΠΊ просто, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ хочСтся ΡΠΏΠ»ΡΡΠ°Ρ‚ΡŒ.

Π’ΠΎΡ‚ Π΄Π°ΠΆΠ΅ Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, СстСствСнно «hello world»:

Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π² FXML опрСдСляСтся Pane, Π² Π½Π΅ΠΉ ΠΎΠ΄Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Button, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ fx:id=»fxButton», ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° Π½Π΅Π΅, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классС-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ onAction=»#click». Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ click Π΅ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° консоль ΠΈ назначСния тСкста самой ΠΊΠ½ΠΎΠΏΠΊΠ΅.

Если Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈ Ρ‚ΠΊΠ½ΡƒΡ‚ΡŒ Π² ΠΊΠ½ΠΎΠΏΠΊΡƒ, Ρ‚ΠΎ Π² консоли ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρƒ ΠΊΠ½ΠΎΠΏΠΊΠΈ измСнится Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Π›ΠΈΡ…ΠΎ? А Π²ΠΎΡ‚ ΠΈ Π½Π΅Ρ‚. Π­Ρ‚ΠΎ Π½Π΅ вносит ясности, ΠΊΠ°ΠΊ с этим Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. И Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ пСстрит ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. А Ссли Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ MVC модСль ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΈΠ½Ρ‹ΠΌ способом Π½Π΅ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ Π²Π»Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, получится каша, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ подскользнСшься, Π½Ρƒ ΠΈ ΠΊΠ°ΠΊ говорят Π²ΠΎ всСх амСриканских Ρ„ΠΈΠ»ΡŒΠΌΠ°Ρ…, «ΡƒΠΏΠ°Π΄Π΅ΡˆΡŒ ΠΈ сломаСшь Π±Π΅Π΄Ρ€ΠΎ». ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, бСдрСнная ΠΊΠΎΡΡ‚ΡŒ β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых крСпких…

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ, Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ казалось Π±Ρ‹ шагом, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²Π·ΡΡ‚ΡŒ Π² этом ΠΆΠ΅ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅, ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ click ΠΈ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΈΠ· ΠΊΠΎΠ΄Π°. НапримСр ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠ»ΠΈΠΊΠ° ΠΌΡ‹ΡˆΠΊΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ fxButton (панСль/ΠΈΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ интСрфСйса, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, это простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ fx:id):

Вас ΠΎΠ±ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ‚ ваша IDE Π΅Ρ‰Π΅ ΠΏΡ€ΠΈ запускС

Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
at sample.Main.start(Main.java:25)

at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
… 1 more
Exception running application sample.Main

Process finished with exit code 1

Π’ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠΈΠ³, захочСтся ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ‚ΡŒΡΡ Π² ΠΎΡ‚Π²Π΅Ρ‚, вСдь Π½Π΅ ясно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° пСрСмСнная. Π’Π΅Π΄ΡŒ это ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΎΠ½ Π·Π½Π°Π΅Ρ‚ ΠΏΡ€ΠΎ FXML Ρ„Π°ΠΉΠ», Π² Π½Π΅Π³ΠΎ с успСхом ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ элСмСнты интСрфСйса ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ, вСдь Π² ΠΊΠΎΠ΄Π΅ с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ click ΠΌΡ‹ Ρ‚Π°ΠΊ ΠΈ Π΄Π΅Π»Π°Π»ΠΈ, ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ ΠΏΠΎ fx:id.
Но это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² FXML. А ΠΏΡ€ΠΈ прямом ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΈΠ· ΠΊΠΎΠ΄Π° java Π² Ρ„Π°ΠΉΠ» FXML, Π° Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, получаСтся, Ρ‡Ρ‚ΠΎ объявлСнная Π² классС пСрСмСнная Button fxButton, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈΡΡŒ β€” Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°. Π’ΠΎΡ‚ казалось Π±Ρ‹, Π½Π΅Π·Π°Π΄Π°Ρ‡Π°. И Π²ΠΎΠ»ΠΊΠΈ Π²Ρ€ΠΎΠ΄Π΅ сыты, Π΄Π° ΠΈ ΠΎΠ²Ρ†Ρ‹ Ρ†Π΅Π»Ρ‹, Π½ΠΎ Π²ΠΎΡ‚ пастух слСгка Π»ΡƒΠΊΠ°Π²ΠΈΡ‚.

Π’Π°ΡˆΠ° IDE, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, IDEA, Π²ΠΏΠΎΠ»Π½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅, модСль Π² Π½Π΅ΠΌ вСрная(Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ FXML ΠΈ классы Controller, Main ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Π½Π΅ΠΌ). Π­Ρ‚ΠΎΠ³ΠΎ достаточно для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ дописал ΠΊΠΎΠ΄Π°, для наглядности, Π½ΠΎ сдСлал это Π² Main классС, вмСсто ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, для экономии мСста.

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Ρ‚ΠΎ для взаимодСйствия с вашими node Π² Π² FXML Ρ„Π°ΠΉΠ»Π΅, Π²Π°ΠΌ трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ дСйствиС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ. Но ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΈΠΌΠ΅Π½Π½ΠΎ дСйствиС ΠΏΠΎ элСмСнту интСрфСйса. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ fx:id.

Но, стоит Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ ΠΎ использовании ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… частях ΠΊΠΎΠ΄Π° (Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒΡΡ, использовании fx:id этих элСмСнтов), Π΄Π°ΠΆΠ΅ Π² этом ΠΆΠ΅ классС (Π° это β€” ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€), вас ΠΆΠ΄Π΅Ρ‚ NullPointerException ΠΈ отсутствиС понимания, собствСнно, WHY? А Π²Π΄Ρ€ΡƒΠ³ я Ρ…ΠΎΡ‡Ρƒ Π² ΠΊΠΎΠ΄Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ панСль, сдСлав Π΅ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ fx:id, ΠΌΠ΅Π½ΡΡ‚ΡŒ тСкст ΠΈΠ»ΠΈ внСшний Π²ΠΈΠ΄ Ρ„ΠΎΡ€ΠΌ, ΠΏΡ€ΠΈ этом Π½Π΅ взаимодСйствуя физичСски с ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠΌΠΈ элСмСнтами, дСлая это ΠΈΠ· ΠΊΠΎΠ΄Π°, согласно ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅? КакоС Π²Π΅Ρ€Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅?

Π­Ρ‚ΠΎ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, учитывая отсутствиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡƒ вопросу, Ρ‡Ρ‚ΠΎ я ΡƒΡˆΠ΅Π» Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π·Π° ΠΏΠΈΠ²ΠΎΠΌ.

Π’Π΅Ρ€Π½ΡƒΠ²ΡˆΠΈΡΡŒ ΠΈ проковыряв Π΄Ρ‹Ρ€Ρƒ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΈ Π² Π³ΠΎΠ»ΠΎΠ²Π΅, ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π² Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, я докопался Π΄ΠΎ истины. ΠœΠ΅ΡΡ‚Π°ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, Π²ΠΈΠ΄Π΅Π» прСдлоТСния провСсти ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. БобствСнно, это ΠΈ оказалось Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ Π½ΠΈΠ³Π΄Π΅ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π½Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². По Ρ‚Π°ΠΊΠΎΠΌΡƒ ΡΠ»ΡƒΡ‡Π°ΡŽ, сСйчас ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρƒ мСня. Как Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° javaFX, ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽ ΠΊΠΎΠ΄.

FXML. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄. НСобходимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€

Main. ЕдинствСнная Π·Π°Π΄Π°Ρ‡Π°, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ сцСну ΠΈΠ· FXML

Controller. АдаптСр FXML ΠΈ java ΠΊΠΎΠ΄Π°.

View. ΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π’ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ ΠΈ View я ΠΏΠΎΠΊΠ°Π·Π°Π», ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами с fx:id.

ΠŸΡ€ΡΠΌΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² FXML Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ id ΠΈ ΠΈΠΆΠ΅ с Π½ΠΈΠΌΠΈ node ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ мСсто Π² ΠΊΠΎΠ΄Π΅, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ присваивания Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ этих node ΠΏΠΎ ΠΈΡ… fx:id.

Π Π°Π·Π±Π΅Ρ€Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠ΄Π°, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅. ЗапускаСтся Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΎΠΊΠ½ΠΎ:
javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. image loader. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:
Π’ FXML Ρ„Π°ΠΉΠ»Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ тСкст labelFx, Π½ΠΎ Π² initialize() ΠΎΠ½ ΠΏΡ€ΠΈ запускС, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅.

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ:
javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. image loader. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:
ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° консоль «Hello World», Ρƒ ΠΊΠ½ΠΎΠΏΠΊΠΈ мСняСтся тСкст Π½Π° «Hey!», ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ labelLocalInitialize(), Π² Π½Π΅ΠΌ локально ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ назначаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ labelFx. Π‘Π»Π΅Π΄ΠΎΠΌ, labelFx назначаСтся Π½ΠΎΠ²Ρ‹ΠΉ тСкст.

Π Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΡ:

Π“Π΄Π΅-Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅ я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ магия Π² javaFX. Она начинаСтся Π² классС View. Π’Ρ€ΠΎΠ΄Π΅, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π±Ρ‹ Π±Ρ‹Π»ΠΎ, Ссли Π±Ρ‹ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ классы, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с id, Π½ΠΎ происходит обратноС… ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ сдСлано, я Π² подробности Π½Π΅ вдавался, хотя ΠΈ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ. Если Π² коммСнтариях Π·Π½Π°ΡŽΡ‰ΠΈΠ΅ люди ΠΏΡ€ΠΈΠΎΡ‚ΠΊΡ€ΠΎΡŽΡ‚ завСсу Ρ‚Π°ΠΉΠ½Ρ‹, Π±ΡƒΠ΄Ρƒ вСсьма Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Release: JavaFX 2.2.40

Last Updated: September 2013

[+] Show/Hide Table of Contents

About This Tutorial

1 Hello World, JavaFX Style

2 Creating a Form in JavaFX

3 Fancy Forms with JavaFX CSS

4 Using FXML to Create a User Interface

5 Animation and Visual Effects in JavaFX

6 Deploying Your First JavaFX Application

Application Files

View Source Code

Download Source Code

Profiles

Gail Chappell

Technical Writer, Oracle

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. gail chappell. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-gail chappell. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° gail chappell. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:Gail is part of the JavaFX documentation team and enjoys working on cutting-edge, innovative documentation.

Nancy Hildebrandt

Technical Writer, Oracle

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. nancy hildebrandt. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-nancy hildebrandt. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° nancy hildebrandt. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:Nancy is a technical writer in the JavaFX group. She has a background in content management systems, enterprise server-client software, and XML. She lives on 480 acres in the middle of nowhere with horses, a donkey, dogs, cats, and chickens, and stays connected by satellite.

We Welcome Your Comments

If you have questions about JavaFX, please go to the forum.

Getting Started with JavaFX

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. javafx previouspage. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-javafx previouspage. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx previouspage. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. javafx. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-javafx. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

4 Using FXML to Create a User Interface

This tutorial shows the benefits of using JavaFX FXML, which is an XML-based language that provides the structure for building a user interface separate from the application logic of your code.

If you started this document from the beginning, then you have seen how to create a login application using just JavaFX. Here, you use FXML to create the same login user interface, separating the application design from the application logic, thereby making the code easier to maintain. The login user interface you build in this tutorial is shown in Figure 4-1.

Figure 4-1 Login User Interface

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. . javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:
Description of «Figure 4-1 Login User Interface»

This tutorial uses NetBeans IDE. Ensure that the version of NetBeans IDE that you are using supports JavaFX 2.2. See the System Requirements for details.

Set Up the Project

Your first task is to set up a JavaFX FXML project in NetBeans IDE:

NetBeans IDE opens an FXML project that includes the code for a basic Hello World application. The application includes three files:

FXMLExample.java. This file takes care of the standard Java code required for an FXML application.

Sample.fxml. This is the FXML source file in which you define the user interface.

SampleController.java. This is the controller file for handling the mouse and keyboard input.

Rename SampleController.java to FXMLExampleController.java so that the name is more meaningful for this application.

Rename Sample.fxml to fxml_example.fxml.

Load the FXML Source File

The first file you edit is the FXMLExample.java file. This file includes the code for setting up the application main class and for defining the stage and scene. More specific to FXML, the file uses the FXMLLoader class, which is responsible for loading the FXML source file and returning the resulting object graph.

Make the changes shown in bold in Example 4-1.

Example 4-1 FXMLExample.java

A good practice is to set the height and width of the scene when you create it, in this case 300 by 275; otherwise the scene defaults to the minimum size needed to display its contents.

Modify the Import Statements

Next, edit the fxml_example.fxml file. This file specifies the user interface that is displayed when the application starts. The first task is to modify the import statements so your code looks like Example 4-2.

Example 4-2 XML Declaration and Import Statements

As in Java, class names can be fully qualified (including the package name), or they can be imported using the import statement, as shown in Example 4-2. If you prefer, you can use specific import statements that refer to classes.

Create a GridPane Layout

The Hello World application generated by NetBeans uses an AnchorPane layout. For the login form, you will use a GridPane layout because it enables you to create a flexible grid of rows and columns in which to lay out controls.

Remove the AnchorPane layout and its children and replace it with the GridPane layout in Example 4-3.

Example 4-3 GridPane Layout

In this application, the GridPane layout is the root element of the FXML document and as such has two attributes. The fx:controller attribute is required when you specify controller-based event handlers in your markup. The xmlns:fx attribute is always required and specifies the fx namespace.

The remainder of the code controls the alignment and spacing of the grid pane. The alignment property changes the default position of the grid from the top left of the scene to the center. The gap properties manage the spacing between the rows and columns, while the padding property manages the space around the edges of the grid pane.

As the window is resized, the nodes within the grid pane are resized according to their layout constraints. In this example, the grid remains in the center when you grow or shrink the window. The padding properties ensure there is a padding around the grid when you make the window smaller.

Add Text and Password Fields

Looking back at Figure 4-1, you can see that the login form requires the title β€œWelcome” and text and password fields for gathering information from the user. The code in Example 4-4 is part of the GridPane layout and must be placed above the statement.

Example 4-4 Text, Label, TextField, and Password Field Controls

The next lines create a Label object with text User Name at column 0, row 1 and a TextField object to the right of it at column 1, row 1. Another Label and PasswordField object are created and added to the grid in a similar fashion.

When working with a grid layout, you can display the grid lines, which is useful for debugging purposes. In this case, set the gridLinesVisible property to true by adding the statement true right after the

statement. Then, when you run the application, you see the lines for the grid columns and rows as well as the gap properties, as shown in Figure 4-2.

Figure 4-2 Login Form with Grid Lines

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. . javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:
Description of «Figure 4-2 Login Form with Grid Lines»

Add a Button and Text

Example 4-5 HBox, Button, and Text

Assigning an fx:id value to an element, as shown in the code for the Text control, creates a variable in the document’s namespace, which you can refer to from elsewhere in the code. While not required, defining a controller field helps clarify how the controller and markup are associated.

Add Code to Handle an Event

Now make the Text control display a message when the user presses the button. You do this in the FXMLExampleController.java file. Delete the code that NetBeans IDE generated and replace it with the code in Example 4-6.

Example 4-6 FXMLExampleController.java

The @FXML annotation is used to tag nonpublic controller member fields and handler methods for use by FXML markup. The handleSubmtButtonAction method sets the actiontarget variable to Sign in button pressed when the user presses the button.

You can run the application now to see the complete user interface. Figure 4-3 shows the results when you type text in the two fields and click the Sign in button. If you have any problems, then you can compare your code against the FXMLLogin example.

Figure 4-3 FXML Login Window

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. . javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:
Description of «Figure 4-3 FXML Login Window»

Use a Scripting Language to Handle Events

As an alternative to using Java code to create an event handler, you can create the handler with any language that provides a JSR 223-compatible scripting engine. Such languages include JavaScript, Groovy, Jython, and Clojure.

Optionally, you can try using JavaScript now.

In the Button markup, change the name of the function so the call looks as follows:

Remove the fx:controller attribute from the GridPane markup and add the JavaScript function in a

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ JavaFX: FXML ΠΈ SceneBuilder

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ графичСский интСрфСйс с JavaFX, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ FXML ΠΈ SceneBuilder.

ВсС посты Π² сСрии ΠΎ JavaFX:

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ способ

ΠŸΡ€ΠΎΡΡ‚ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ β€” ΠΊΠΎΠ΄ выглядСл Ρ‚Π°ΠΊ:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅ вСсь ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс создан Π² Java ΠΊΠΎΠ΄Π΅.

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ услоТнСния вашСго прилоТСния, ΠΊΠΎΠ³Π΄Π° приходится Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ мноТСство ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ слоТным для понимания. Однако это Π΅Ρ‰Π΅ Π½Π΅ всС β€” Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ классС присутствуСт ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° структуру, Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ эффСкты ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π£ класса явно Π½Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Π²Π΅Π±-интСрфСйсом, Π³Π΄Π΅ каТдая страница ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ FXML

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ вСсь ΠΊΠΎΠ΄ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ идСя. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Π±Ρ‹Π»ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ управляСмым.

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ шаблонов Π΄ΠΈΠ·Π°ΠΉΠ½Π° для этого. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π²Ρ‹ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ Β«Model-View-WhateverΒ» β€” это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Β«Model View ControllerΒ», Β«Model View PresenterΒ» ΠΈΠ»ΠΈ Β«Model View ViewModelΒ».

МоТно часами ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² β€” Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ это здСсь. Π‘ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ с JavaFx Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΈΠ· Π½ΠΈΡ….

Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΉ конструкции вашСго ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ XML.

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ иСрархичСская структура XML β€” это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ способ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС. HTML Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π²Π΅Ρ€Π½ΠΎ?

Π€ΠΎΡ€ΠΌΠ°Ρ‚ XML, спСцифичный для JavaFX, называСтся FXML. Π’ Π½Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ прилоТСния ΠΈ ΠΈΡ… свойства, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΈΡ… с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ взаимодСйствиями.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° FXML Ρ„Π°ΠΉΠ»ΠΎΠ²

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ наш ΠΌΠ΅Ρ‚ΠΎΠ΄ запуска для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с FXML?

Π—Π΄Π΅ΡΡŒ root прСдставляСт ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ вашСго ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Π½Π΅Π³ΠΎ.

ΠœΠ΅Ρ‚ΠΎΠ΄ load ΠΈΠΌΠ΅Π΅Ρ‚ generic Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π° Π½Π΅ Parent. Π”Π°Π»Π΅Π΅, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ доступ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ. Однако, это Π΄Π΅Π»Π°Π΅Ρ‚ ваш ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌ. Если Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² вашСм FXML, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²ΠΎ врСмя выполнСния, Π½ΠΎ ΠΏΡ€ΠΈ этом Π²ΠΎ врСмя компиляции Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ошибок. Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ нСсоотвСтствиС Ρ‚ΠΈΠΏΠ°, объявлСнного Π² вашСм FXML ΠΈ Π² Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ΅ Java FXML.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ FXML Ρ„Π°ΠΉΠ»Π°

ПослС создадания Ρ„Π°ΠΉΠ»Π° Π² Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡŽ XML:

Π˜ΠΌΠΏΠΎΡ€Ρ‚

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² Ρ„Π°ΠΉΠ», Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π² Java классах. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ классы ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°ΠΊΠΈ подстановки ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°:

Π₯ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒΡŽ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ вмСсто добавлСния всСх ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ваша IDE Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ добавлСнию ΠΈΡ… Π² классы Java.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ каТдая сцСна ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Для Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ (label):

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠ΅Ρ‚ΠΊΠ° Π² качСствС ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° β€” это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ рСалистичный ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ°ΠΊΠ΅Ρ‚ (layout), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΈΡ… располоТСниС. ΠœΡ‹ рассмотрим ΠΌΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅ Π² этой сСрии, Π° сСйчас Π΄Π°Π²Π°ΠΉΡ‚Π΅ просто Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ простым VBox, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ свои Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

FX Namespace

БущСствуСт ΠΏΠ°Ρ€Π° элСмСнтов ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² FXML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ нСдоступны. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ пространство ΠΈΠΌΠ΅Π½ (Namespace) FXML, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… доступными. Π•Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ элСмСнты ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ fx. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π² наши ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

Атрибут fx:id являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ссылки Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… частСй нашСго FXML ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΠ· нашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°.

Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹

НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ° статично. Π•ΡΡ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°, Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ динамичСского.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ нашСй ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ с Β«Click me!Β» Π½Π° Β«Click me again!Β».

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события onAction для нашСй ΠΊΠ½ΠΎΠΏΠΊΠΈ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° fx:id, это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ·ΠΆΠ΅ для ссылки Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ события. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π³Π° fx:script. Π’Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ языки для написания скрипта, JavaScript, Groovy ΠΈΠ»ΠΈ Clojure. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° JavaScript:

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. image loader. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ссылаСмся Π½Π° наш ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Button с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° mainButton, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» объявлСн Ρ‚Π°ΠΊ:

Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ язык сцСнариСв Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ FXML:

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΠΎΠ»Π½Ρ‹ΠΉ тСкст ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. image loader. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

Π”ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это?

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ fx:id ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ простоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скрипта Π½Π° JavaScript. НСуТСли это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ?

ΠžΡ‚Π²Π΅Ρ‚ β€” Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π΅Ρ‚. Π•ΡΡ‚ΡŒ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ‚Π°ΠΊΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π²Π΅Π΄Π΅Π½ FXML, Π±Ρ‹Π»Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрСсов β€” Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ структуру ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса. Π’ этом скриптС снова Π²Π΅Ρ€Π½ΡƒΠ»ΠΎΡΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ слитноС со структурой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ большС Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΊΠΎΠ΄ΠΎΠΌ Java, Π° с XML, Π±Ρ‹Π»ΠΈ ΡƒΡ‚Ρ€Π°Ρ‡Π΅Π½Ρ‹ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π° Π²ΠΎ врСмя компиляции ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π²ΠΎ врСмя выполнСния, Π° Π½Π΅ Π²ΠΎ врСмя компиляции. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ стало ΠΎΡ‡Π΅Π½ΡŒ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌ ΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ΠΌ ошибкам.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрСсов? МоТно ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ с нашим Ρ„Π°ΠΉΠ»ΠΎΠΌ FXML. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ β€” это Java класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ повСдСния ΠΈ взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ являСтся POJO, ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ.

Как ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° с нашим FXML? По сущСству, Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

На Java

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы создания экзСмпляра, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости. Π—Π°Ρ‚Π΅ΠΌ просто Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ вашим FXMLLoader.

Π’ FXML

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ класс вашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ fx:controller, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅.

Если Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ свой класс Controller Π² FXML, ΠΎΠ½ автоматичСски создаСтся для вас. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ β€” Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ конструктор Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса Controller.

Для получСния доступа ΠΊ экзСмпляру ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, созданного автоматичСски, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ FXML:

Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° имССтся ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ скрипт ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ наТатия ΠΊΠ½ΠΎΠΏΠΎΠΊ прямо Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅:

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом являСтся рСгистрация Π²Ρ‹Π·ΠΎΠ²Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² качСствС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° события onAction нашСй ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ· нашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°ΠΊ # ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ, ΠΎΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ MainSceneController.buttonClicked(). Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ объявлСн public. Если ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа Π±ΠΎΠ»Π΅Π΅ строгий, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @FXML.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€

Пока Ρ‡Ρ‚ΠΎ ΠΌΡ‹ просто ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ Π½Π° консоль. Π§Ρ‚ΠΎ Ссли ΠΌΡ‹ снова Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ тСкст нашСй ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π° Β«Click me againΒ»? Как ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылки Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² нашСм ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅?

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, это Π»Π΅Π³ΠΊΠΎ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ эти Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ fx:id?

JavaFX пытаСтся автоматичСски ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с fx:id с полями ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π² вашСм ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠ° описанная Π²Ρ‹ΡˆΠ΅ с

JavaFX пытаСтся Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ваш ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π² ΠΏΠΎΠ»Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ mainButton:

Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, ваши поля Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ public ΠΈΠ»ΠΈ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ @FXML.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ ссылка Π½Π° Π½Π°ΡˆΡƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ тСкст:

Scene Builder

НаписаниС вашСй структуры GUI Π² XML ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ СстСствСнным, Ρ‡Π΅ΠΌ Π² Java (особСнно Ссли Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с HTML). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄ΠΎ сих ΠΏΠΎΡ€ это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π₯ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒΡŽ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сущСствуСт ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Scene Builder, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π² создании ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса. Π’ Π΄Π²ΡƒΡ… словах, это графичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ для вашСго графичСского интСрфСйса.

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. image loader. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

Π’ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ имССтся Ρ‚Ρ€ΠΈ основных области:

Standalone

Scene Builder ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для рСдактирования FXML Ρ„Π°ΠΉΠ»ΠΎΠ².

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с IntelliJ IDEA

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, Scene Builder ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с IDE.

Π’ IntelliJ IDEA Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° любом FXML Ρ„Π°ΠΉΠ»Π΅ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ мСню Β«ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒΒ» Π² SceneBuilder.

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, IntelliJ IDEA ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ SceneBuilder нСпосрСдствСнно Π² IDE. Если Π²Ρ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» FXML Π² IDEA, Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части экрана появятся Π΄Π²Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ

javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. image loader. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ Ρ„ΠΎΡ‚ΠΎ. javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° javafx ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ fxml ΠΊ ΠΊΠΎΠ΄Ρƒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с основным классом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (допустим, это Ρ„Π°ΠΉΠ» Main.java), Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Main.fxml ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС:

Π’ IntelliJ IDEA ΠΌΠΎΠΆΡ‚ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ располоТСниС исполняСмого Ρ„Π°ΠΉΠ»Π° SceneBuilder:

Settings β†’ Languages & Frameworks β†’ JavaFX β†’ Path to SceneBuilder

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *