İçindekiler:
- ile biter. (Liste 1'in en üstünde) XML öğeleri sayılmaz.
- Alternatif olarak, önceden paketlenmiş JavaFX kodunu çalıştırabilirsiniz. Hazır paketlenmiş bir paket, bilgisayarın bir uygulamayı çalıştırmak için ihtiyaç duyduğu her şeyi içerir. Bu "herşey" kullanıcının bilgisayarında bir Java sanal makinesini kontrol etmek için kod ve bilgisayarta bir Java sanal makine bulunmaması durumunda bir Java sanal makine indirmek için kod içerir. Bir JavaFX uygulamasını bu şekilde hazırladığınızda, programınızın ana bir yöntemi olması gerekmez. Sistem, programın başlatma yöntemini otomatik olarak çağırır.
Video: Java 21 - Metot ve Fonksiyonlar 2024
JavaFX çerçevesini kullanarak, geliştiriciler Java uygulamalarına yararlı, görsel olarak çekici bileşenleri ekler. JavaFX, 1995'deki Soyut Pencereleme Araç Seti ve 1998'de Java Swing'i ile başlayan bu tür birçok çerçeveden biridir. JavaFX'in ilk sürümü, 2008 yılına dayanıyor; ancak JavaFX, standart Java kütüphanesinde birinci sınıf vatandaş haline geldi. Java 7 2011'de.
Ayrıca 2011'de Oracle, JavaFX Sürüm 2'yi yayınladı. Bu yeni sürüm, XML belgelerini Java kodu ile birleştirdi - bir uygulamanın görünümünü XML ve bir uygulamanın Java koduyla yaptığı eylemleri bildirdi. JavaFX, FXML adlı kendi XML ağızçasını kullanır.
XML eXtended İşaretleme Dili anlamına gelir ve JavaFX muhtemelen Java ile "özel bir EFF olan şeyleri içerir" - 1 -> (Kısaltmaların kökenlerini önemsiyorsanız Bu makale, kendi zevkinize göre FXMLEFFtct eXtended Markup Language veya EFF-ECTS İşaretleme Dili anlamına gelir. basit bir JavaFX programında bulabilirsiniz. ("Bazı adlara" yapılan bu başvurunun "yalnızca JavaFX dünyasına ait isimler" anlamına geldiğini unutmayın - bu, diğer pencere ortamlarında görünen TextField ve Button gibi isimleri içermez ve bu, Java. lang ve main gibi vanilya Java teknolojilerine ait isimleri içerir.)
Liste 1'de FXML kodu, Liste 2'de Java kodu bulunur. Bu iki listeyi tek bir uygulamanın parçası olarak çalıştırdığınızda, metninizdeki harfleri büyük harfle yazan bir program elde edersiniz. (Bu noktada, "Metni büyük harf kullanıma açan bir uygulama? Önemli bir anlaşma" demeniz gerekebilir. Burada uygun bir yanıt "BİR BÜYÜK BİR ÇALIŞMAYA KABUL EDİLEN BİR İYİLEŞTİRME!")
Listeleme 1: Kök. fxml F ile
<< AnchorPane prefWidth = "130.0" prefWidth = "198.0" xmlns = " // javafx. Com / javafx / 8" xmlns: fx = " // javafx. com / fxml / 1" fx: denetleyici = "uygulama Ana"> << çocuklar >> fx: id = "textField " layoutX=" 25. 0 " layoutY =" 26. 0" /> mnemonicParsing =" false " onAction =" # onClick " 2'ye ayrılıyor: Ana. java F ile
paket uygulaması; import javafx. uygulama. Uygulama; import javafx. Etkinlik. ActionEvent; import javafx. fxml. FXML; import javafx. fxml. FXMLLoader; import javafx. faliyet alani, sahne. Veli; import javafx. faliyet alani, sahne. Faliyet alani, sahne; import javafx.faliyet alani, sahne. kontrol. Metin alanı; import javafx. sahne. Sahne; public class
(args);} @Override public void başlangıç ( Aşama primaryStage) {try { Ana kök = FXMLLoader'ı deneyin. yükle (getClass (). getResource ("Kök fxml")); Sahne sahne = yeni Sahne (kök, 400, 400); faliyet alani, sahne. getStylesheets (). add (getClass (). getResource ("uygulama. css"). toExternalForm ()); primaryStage. setScene (sahne) ; primaryStage. show () ;} catch (İstisna e) {e. printStackTrace ();}} @FXML özel TextField textField; @FXML protected void onClick (ActionEvent olayı) {textField. FXML kodu Her XML belgesinde olduğu gibi, Liste 1'deki belge kök unsuruna sahiptir - tek bir eleman başlar belgenin başında ve belgenin sonuna kadar biter. Liste 1'de, kök öğe ile başlar ve
ile biter. (Liste 1'in en üstünde) XML öğeleri sayılmaz.
Kök unsur olarak AnchorPane AnchorPane (veya daha resmen bir javafx sahne düzeni, AnchorPane), demirlemenin yapılabileceği bir yerdir. Büyük, boş bir alana bir düğme veya metin alanı koymaya çalışmayı düşünün. Bir AnchorPane olmadan bu bileşenler alanın içinde nazikçe yüzüyorlar. Bir AnchorPane ile, metin alanının sol kenarını, AnchorPane'in sol kenarından tam 25 0 piksel yapabilirsiniz. (Liste 1'deki TextField öğesinin layoutX özniteliğine bakın.) Ayrıca, AnchorPane ile, metin alanının üst kenarının AnchorPane'in tam kenarından 26.0 piksel olmasını sağlayabilirsiniz. (Liste 1'deki TextField öğesinin layoutY özniteliğine bakın.) Aynı, AnchorPane'in içine yerleştirdiğiniz bir düğme veya başka herhangi bir bileşen için de geçerlidir.
Bir FXML belgesinin kök öğesinin içinde, bir fx: controller özniteliği, Java'ya uygulamanla ilişkili eylemleri gerçekleştiren kodu sınıfı olan
denetleyicisi
sınıfının adını söyler. Liste 1'de denetleyici sınıfının adı uygulamadır. Ana. Ve ne tesadüf! Liste 2'deki sınıfın adı Main'dir ve application adlı bir pakette!
FXML kodunu bir anahat olarak düşünüyorsanız, alt başlıklar ve alt başlıklar alt başlıklar içeren bir başlık vardır. Liste 1'de, birincil başlık AnchorPane'dir. AnchorPane'in sadece alt başlığı çocuklar. Ancak çocukların kendilerine ait iki alt başlığı vardır; yani TextField ve Button.
fx: id özniteliği TextField öğesinin bir fx: id özniteliği vardır. Bu özellik, bu bileşeni bazı Java kodlarında nasıl bulacağınızı bildirir. Başka bir deyişle, "Uygulamadaki bu widget'e bakmak" diyor. Ana Java kodu, textField adını kullanın. "(Daha fazla ayrıntı istiyorsanız, Liste 2'deki kod tartışmasına göz atın.)
Bir bileşeni tanımlamak için açıklayıcı bir sözcük kullanmak zorunda değilsiniz.
Sürekli olarak woofinflang kelimesini kullandığınız sürece (Java kodunuzda woofinflang sözcüğüne atıfta bulunarak) her şey sorunsuzca geçecektir. Tabii textField, textField2 ve phoneNumberField gibi isimler woofinflang gibi isimlerden daha bilgilendirici. Yani mümkünse, woofinflangs'tan uzak durun.
The mnemonicParsing özniteliği
Liste 1'de, Button öğesinin içinde mnemonicParsing özniteliği false değerine sahiptir. Bu yanlış değer, Java için düğme için kısayol tuşu ayarlamayı rahatsız etmemesini söyler. Değer doğruysa, düğmenin metin özniteliğinin değerine bir alt çizgi ekleyebilirsiniz:
text = "_ Büyük harfle"
Böylece kullanıcı fareyi düğmenin üzerine getirmek zorunda kalmaz. Alt çizgi C harfinden hemen önce geldiğinden, Alt + C tuşlarına basmak düğmeyi tıklama ile aynı etkiye sahip olacaktır.OnAction özniteliği
Bir düğmenin onAction özniteliği, kullanıcı düğmeyi tıklattığında yürütülecek yöntemin adını Java'ya bildirir. Liste 1'de, onAction özelliğinin değeri #onClick'tir. Bu, kullanıcı düğmeyi tıklattığında Java'ya denetleyici sınıfının onClick yöntemini çağırmasını söyler. Neyse ki uygulama. Liste 2'deki ana sınıf bir onClick yöntemine sahiptir.
Liste 1'de, onAction değeri #onClick'tir. Ancak, Liste 2'de, karşılık gelen yöntem adı karma simgesi olmadan onClick'tir. Bir düğmenin onAction özniteliğinde hash sembolü (#), yöntem adının bir parçası değildir. Fakat bu, FXML belgenizdeki karma sembolünü atlayabileceğiniz anlamına gelmez. Karma simgesini atlarsanız, programı çalıştırmayı denediğinizde çirkin bir hata mesajı görürsünüz.
Java koduListe 2'deki sınıf, Uygulama sınıfını genişletir. Bir Uygulama, tam olarak ne olduğunu düşündüğünüz şeydir - kullanıcının başlatabileceği bir grup kod; "Belge oluşturma", "Web'de Surf" veya "Bir arkadaş bul" gibi açıkça belirtilen amacı olan bir program. "
Çalıştırma ve başlatma
Bir JavaFX programını çalıştırmak için en az iki yol vardır. Bir yöntem normal bir Java uygulaması olarak çalıştırmaktır. Örneğin, Eclipse'de Farklı Çalıştır -> Java Uygulaması'nı seçersiniz.
Bunu yaptığınızda, bilgisayarınız Java sanal makinesini başlatır ve bu da programın temel yöntemini çağırır. Liste 2'de, ana yöntem yalnızca bir deyimi yürütür: başlatma yöntemine bir çağrı. Başlatma yöntemini çağırmak uygulamanın JavaFX tekerleklerini harekete geçirir ayarlar.
Alternatif olarak, önceden paketlenmiş JavaFX kodunu çalıştırabilirsiniz. Hazır paketlenmiş bir paket, bilgisayarın bir uygulamayı çalıştırmak için ihtiyaç duyduğu her şeyi içerir. Bu "herşey" kullanıcının bilgisayarında bir Java sanal makinesini kontrol etmek için kod ve bilgisayarta bir Java sanal makine bulunmaması durumunda bir Java sanal makine indirmek için kod içerir. Bir JavaFX uygulamasını bu şekilde hazırladığınızda, programınızın ana bir yöntemi olması gerekmez. Sistem, programın başlatma yöntemini otomatik olarak çağırır.
A. kavanoz dosyası a gibi. Zip dosyası dışında her biri. jar dosyası, Java programlarına özgü belirli öğeler içerir. Birine koyabileceğiniz şeylerden biri.jar dosyası hazır paketlenmiş bir JavaFX uygulamasıdır.
Başlatma yöntemini çağırdığınızda, Java, uygulamanızın başlatma ve başlatma yöntemlerine çağrılar yaparak yanıt verir. Ana sınıfınız, Uygulama sınıfının varsayılan init yöntemini devraldığından, Liste 2'de bir init yöntemi görmüyorsunuz. (Varsayılan init yöntemi hiçbir şey yapmadığı için bu sorun değildir.)
Diğer şeylerin içindeki şeyler
Liste 2'deki başlatma yöntemi bir Üst öğe oluşturur. Ana, bir Sahnenin başlangıç noktası ve Sahne Sahne Alanı'nda görülür. İşte biraz daha detay:
Bir Sahne, normalde "pencere" dediğiniz şey. "
Bu, kullanıcının ekranında dikdörtgen bir çalışma alanıdır.
Bir Sahne (aynı zamanda
sahne grafiği
olarak bilinir), bir bileşen ağacıdır.
Örneğin, Bir Sahne iki bölme içerebilir. En soldaki bölme iki küçük bölme içerir - bir üst bölme ve bir alt bölme. Üst panelde bir düğme bulunur; alt bölme bir metin alanı içerir. En sağ bölme resim ve resim için bir etiket içerebilir.
Bu makalenin başvurusunda, bileşen ağaçları oldukça basittir. Sahne, sırayla bir TextField ve bir Düğme içeren bir AnchorPane içerir. (Listeye bakınız.)
Bir Veli, bir Sahnenin başlangıç noktasıdır. Önceki mermide görünen şeye rağmen, Bir Sahne, iki bölüme sahip olmak ya da iki şey yaşayarak hayatına başlayamaz. Her Sahne tek bir bileşenle başlar ve bu bileşen Parent türünde olmalıdır. Bu makalenin başvurusunda, Sahne, bir TextField ve bir Düğme içeren bir AnchorPane içeren bir Ebeveyn içerir. Liste 2'deki start yöntemi, bir Ana öğeyi, Liste 1'de açıklanan bileşenlere bağlar; bir Sahne'yi Anale ilişkilendirir ve Sahne Alanı'nı Sahne Alanı ile ilişkilendirir. Son olarak, kod Sahne Alanı sınıfının show yöntemine yapılan çağrı ile Sahne Alanı'nı görüntüler.
Web sayfası tasarımını biliyorsanız, sahnenin görünümünü tanımlamak için basamaklı stil sayfalarını (CSS) kullanabilirsiniz. Liste 2'de sahne çağrısı. getStyleSheets (). Ekle sahnenizle bir stil sayfası ilişkilendirir. Eğer senin. css dosyası (bu makalenin örneğinde olduğu gibi) boş, daha sonra sahne çağrılıyor. getStyleSheets (). add'ın bir etkisi yoktur.
Harekete Geçme
Liste 1'de
satırı, kullanıcının ekrandaki bileşenlerden birine başvurmanın bir yolunu sunar. Liste 2'de, satır
özel TextField textField;, bu textField bileşenini Java kodunuzda bir nesne haline getirir.
Yeniden listeleme 1'de düğmenin onAction özelliği, kullanıcı düğmeyi tıklattığında Java'ya denetleyici sınıfının onClick yöntemini çağırmasını söyler. Liste 2'de, onClick yöntemi textField bileşeninin içindeki metinle kandırılır. (Daha açık belirtmek gerekirse, onClick yöntemi metin alanındaki metni alır, metni büyük harf yapar ve büyük harfli metni tekrar textField'e koyar.) Kullanıcı, düğmeyi tıklattığında programın ne yapacağını bilir.
Her zaman textField gibi kelimeleri kullanmak zorunda kalmazsınız. Adın sürekli olarak kullanıldığı müddetçe bershmlug olarak adlandırabilirsiniz.FXML dosyasında
yazarsınız ve Java kodunda,
@FXML private TextFieldbershmlug
yazarsınız; @FXML protected void onClick (ActionEvent olayı) {
bershmlug
. setText (
bershmlug .getText (). toUpperCase ());} Liste 2'deki @FXML ek açıklamalar erişim kontrolü içindir. Bir JavaFX programı çalıştırdığınızda, bir yükleyici FXML kodunuzu kavrayıp Java koduna dönüştürür. (FXML kodunu programınıza yükler.) İşini yapmak için yükleyici textField ve Listing 2'deki onClick gibi adlara erişmelidir. Fakat unutmayın: Bu yükleyici kendi programınızın parçası değildir. Yükleyici Java standart kitaplıklarına aittir. TextField ve onClick adlarına erişimi nasıl kontrol edebilirsiniz? Java'nın sıradan erişim düzenleyicileri (public, protected, private ve default) size küçük bir seçenek bırakmaz. Bu değiştiricilerle, dış program tarafından erişime izin vermenin tek yolu, textField ve public olarak bildirmektir. Fakat birçok geliştirici için, kamu erişiminin ayrımsız kullanımı gaucheolarak kabul edilir. Genel erişime sahip her sınıfı textField ve onClick'e erişebilir. JavaFX geliştiricisinin istediği şey bu değil.
Bu sorunu çözmek için, @FXML açıklaması özel bir erişim türünü sağlar. Liste 2'de, textField değişkeni özel, dolayısıyla normalde, Main dışındaki hiçbir sınıf textField değişkenine erişemez. Ancak @FXML ek açıklaması yükleyiciye özel ayrıcalık tanır. Diğer kodların aksine, yükleyici kodu textField değişkenine referans verebilir. Programınızı derlediğinizde ve çalıştırdığınızda, Java @FXML ek açıklamasını görür ve yükleyiciye erişim sağlamak için özel hileler yapar. Aynı şey onClick yöntemi için de geçerlidir. @FXML ek açıklaması olmadan, protected onClick yöntemi sadece kendi uygulama paketinizdeki sınıflardan ve Ana sınıfınızın alt sınıflarından çağrılabilir. Yükleyici bu iki şeyden de değildir. Dolayısıyla, yükleyici tarafından onClick yönteminize özel erişim izni vermek için onClick yöntem bildiriminizi @FXML ile önsözünüz.