JavaFX Temelleri (1)



Benzer belgeler
Temel JavaFX Bileşenleri (1) Labeled, Label, Button, ToggleButton, RadioButton, ToggleGroup, CheckBox, ComboBox, Slider, ListView ve SelectionModel

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

JavaFX Temelleri (2)

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

BİL-141 Bilgisayar Programlama I (Java)

Görsel Programlama DERS 08. Görsel Programlama - Ders08/ 1

Burak Kıymaz JAVA FX

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10. Yrd.Doç.Dr.Hacer Karacan

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Java da. ve AWT ve SWING Kütüphaneleri. BBS-515 Nesneye Yönelik Programlama. Ders #8 (9 Aralık 2009)

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

MOBİL UYGULAMA GELİŞTİRME

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 18: Formatlı Grafik Kullanıcı Arayüzü Oluşturma

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Üst Düzey Programlama

Temel JavaFX Bileşenleri (2) TextField, ScrollPane, TreeView ve TableView,

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Klavyeden Basit Giriş/Çıkış İşlemleri

Android Kaynakları (Resources)

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Görsel Programlama DERS 07. Görsel Programlama - Ders07/ 1

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

OÖ lçu mu Uygulaması

Java da İstemci Tarafı Uygulamalar

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

HSancak Nesne Tabanlı Programlama I Ders Notları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

Intercepting Filter Tasarım Şablonu KurumsalJava.com

Decorator Tasarım Şablonu

New Project. User guide

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

Nesne Yönelimli Programlama

Spring Framework Eğitimi

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

ECLIPSE PROGRAMININ ÇALIŞTIRILMASI

16. Kesit ve Cephe Aracı

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

MOBİL UYGULAMA GELİŞTİRME

BM208- Nesneye Dayalı Analiz ve Tasarım. Sunum 7

BİL-141 Bilgisayar Programlama I (Java)

MOBİL UYGULAMA GELİŞTİRME

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

// hataları işaret eden referans

1 JAVASCRIPT NEDİR? 1

ORNEK 1: Tarım Makinaları ve Teknolojileri Mühendisliği başlıklı çerçeve üretme.

Üst Düzey Programlama

Android Ders Notları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

public static int Toplam int x, int y

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

1 - Button Kontrolu Nasıl Yapılır?

5. Bölüm Alt Sınıflar (Nested Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Kalıtım (Inheritance)

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

HSancak Nesne Tabanlı Programlama I Ders Notları

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Çizgilerin kalınlığını Dolguları Temel dönüşüm işlemlerini Bileşik nesne oluşturma işlemlerini kontrol etmemizi sağlar.

7. HAFTA. Erişim Belirleyiciler

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

Java Class Yapısında Finalize Metotunun Kullanımı

11- FONKSİYONLAR (FUNCTIONS)

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

YZM 2105 Nesneye Yönelik Programlama

ASP.NET ile Bir Web Sitesi Oluşturma

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Microsoft Office Access Ders İçeriği 25 Saat. Access Temel 10 saat

Q-Biz İş Zekası 5.1. Versiyon Yenilikleri

ATATÜRK ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BIM 205 GÖRSEL PROGRAMLAMA GÜZ DÖNEMİ ÖDEV-1

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

YZM 2105 Nesneye Yönelik Programlama

3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

Recep Tayyip Erdoğan Üniversitesi Teknik Bilimler MYO Bilgisayar Teknolojileri Bölümü / Bilgisayar Programcılığı. ***

Proje 1. Arayüz Tasarımı

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

8.Sayfa ve 9.Yazım 10.Belge Görünüm 11.Ekran Yakınlaştırma Sözcük Sayısı Denetimi Düğmeleri ve Uzaklaştırma

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

JAVADA METOTLAR. BMÜ-111 Algoritma ve Programlama. Yrd. Doç. Dr. İlhan AYDIN

BİL132 Bilgisayar Programlama II

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Java da İşleçler, Ders #3 (4 Kasım 2009)

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

Nesneye Dayalı Programlama

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

MOBILEPAX SOAP PRODUCT API KULLANIM ŞEKLİ

Transkript:

JavaFX Temelleri (1) Sahne Çizelgesi (Scene Graph), Yerleşim Panoları (Layout Panes), Uygulama Soyut Sınıfı ve İskeleti, Uygulama Sahnesi (Application Scene), GUI Olayları (GUI Events), Olay İşleme (Event Processing), Tuval Üzerine Çizim (Canvas Drawing), Resim Gösterme, Efektler ve Dönüşümler (Transforms)

JavaFX GUI Çerçevesi Java GUI çerçevesi evrimi: AWT Swing JavaFX JavaFX: dinamik görsel efektler içeren modern GUI ler geliştirmeyi sağlar En son versiyonu: JavaFX 8 javafx öneki içeren paketler içerisinde gerçekleştirilmiştir - Java 8 in parçası

Sahne alanı, Sahne ve Nod Sahne alanı (Stage): bir grafiksel sahne için en üst seviye konteyner (toplevel container) Birincil sahne alanı (primary stage): Java çalışma ortamı tarafından sağlanır Uygulama tarafından ek sahne alanları oluşturulabilir Sahne(Scene): grafiksel bileşenlerin konteyneri. Birden fazla sahne oluşturulabilir Sahne alanında bir sahne gösterilebilir. Nod (Node): sahneye eklenebilen grafiksel bileşenler

Sahne Grafiği (Scene Graph) Sahne bir veya daha fazla nod içerir: Örnekler: button, label, check box, vs. Sahnedeki nodların kümesi bir ağaç yapısı oluşturur: sahne grafiği Kök nod (root node): sahnedeki en üst seviye noddur Üst veya dal nodları (parent or branch nodes):çocukları olan nodlardır Yapraklar (leaves): çocukları olmayan nodlardır Yerleşim Panoları (layout panes): çocuk nodların yerleştirilmesinden sorumlu üst nodlardır Paket: javafx.scene.layout Örnekler: FlowPane, GridPane, BorderPane, StackPane, Hbox, VBox

JavaFX Uygulamaları javafx.application.application soyut sınıfı Kendi uygulamamızı geliştirmek için bu sınıftan bir alt sınıf oluşturmalıyız Uygulama hayat döngüsü ile ilişkili metotlar: void init() Uygulama için gerekli ilk değer atamaları (initializations) için kullanılabilir abstract void start(stage primarystage) Soyut metot (tüm uygulamalar tarafından gerçekleştirilmelidir) primarystage: java çalışma ortamı tarafından oluşturulan birincil sahne alanı Birincil sahne alanı için bir sahne oluşturmak için kullanılabilir void stop() Uygulama sonlandırıldığından yapılması gereken işlemler varsa bunlar için kullanılır

JavaFX Uygulamasının Çalıştırılması (1/4) static void launch(string... args) Uygulama alt sınıfından çağırılmalıdır static void launch(class<? extends Application> appclass, String... args) Her hangi bir sınıftan çağırılabilir JavaFX uygulaması gerçekleştirimi olarak appclass nesnesini kullanır

JavaFX Uygulamasının Çalıştırılması (2/4) Çalıştırıcı iş parçacığı (launcher thread) launch() metodunu çağıran iş parçacığı JavaFX sahne alanları ve sahneleri bu iş parçacığı tarafından oluşturulamaz Uygulama iş parçacığı (application thread) JavaFX kütüphanesi tarafından oluşturulan iş parçacığı Sahneler bu iş parçacığı tarafından tanımlanmalıdır ve bu iş parçacığı tarafından değiştirilebilir

JavaFX Uygulamasının Çalıştırılması (3/4) launch() metotları: Application nesnesini oluştururlar ve onun init() metodunu çağırırlar Uygulama iş parçacığını oluştururlar Uygulama iş parçacığının sona ermesi için beklerler

JavaFX Uygulamasının Çalıştırılması (4/4) Uygulama iş parçacığı: Birincil sahne alanını oluşturur ve start() metodunu çağırır Birincil sahne alanı, start() metoduna parametre olarak gönderilir Uygulama sonlanana kadar GUI olaylarını işler Platform.exit() çağırıldığında veya tüm uygulama pencereleri kapatıldığında sonlanır stop() metodunu çağırır launch() tipik olarak uygulamalardaki static main() metotları tarafından çağırılır

Uygulama İskeleti (1/3) public class JavaFXSkeleton extends Application { public static void main(string[] args) { } System.out.println("Launching JavaFX application"); launch(args); public void init() { System.out.println("init() method"); } JavaFXSkeleton Projesi

Uygulama İskeleti (2/3) public void start(stage primarystage) { System.out.println("start() method"); } primarystage.settitle("hello World!"); primarystage.show(); public void stop() { } } System.out.println("stop() method"); JavaFXSkeleton Projesi

Uygulama İskeleti (3/3) Konsol çıktısı: Uygulama başlangıcında: Launching JavaFX application init() method start() method Pencere kapatıldığında: stop() method JavaFXSkeleton Projesi

Uygulama Sahnesi (Application Scene) Tipik olarak Application nesnesinin start() metodunda oluşturulur Scene nesnesi hazırlandıktan sonra bir sahne alanına (Stage) atanır void setscene(scene scene): Stage sınıfındaki metot Uygulama sahnesi bir kök noda (root node) ihtiyaç duyar Sahne sınıfının yapıcısına paramere olarak gönderilir Kök nod: sahnede üst nodu (parent node) olmayan tek noddur Parent nodunun (Alt nodları olabilen Node) bir alt sınıfı olmalıdır Sahne grafiğinde tüm diğer nodlar: Kök nodun alt nodlarıdır (çocuklarıdır) Direk veya dolaylı alt nodlar

Sahne Örneği public class SceneExample extends Application { public void start(stage primarystage) { primarystage.settitle("scene Example"); FlowPane rootnode = new FlowPane(); Label label = new Label("my label"); rootnode.getchildren().add(label); Scene scene = new Scene(rootNode); primarystage.setscene(scene); primarystage.show(); } } SceneExample Projesi

GUI Olayları javafx.event.event sınıfı java.util.eventobject sınıfının alt sınıfı Temel Java olayı fonksiyonlarını miras alır Her bir olay, bir olay kaynağı ile ilişkilendirilir Olay kaynağı getsource() metotu ile elde edilir Olaylar EventHandler arayüzü gerçekleştirimleri ile işlenir interface EventHandler<T extends Event> void handle(t event) Tipik olarak anonim sınıflar kullanılarak gerçekleştirilir Olaylar JavaFX uygulama iş parçacığında işlenir handle() metodu çabuk bir şekilde sonlanmalıdır. Aksi halde GUI cevap veremez bir hal alır

GUI Olayları Örneği public class EventExample extends Application { public void start(stage primarystage) { primarystage.settitle("event Example"); FlowPane rootnode = new FlowPane(); final Button button = new Button("my button"); button.setonaction(new EventHandler<ActionEvent>() { public void handle(actionevent event) { button.settext("pressed"); }}); rootnode.getchildren().add(button); Scene scene = new Scene(rootNode); primarystage.setscene(scene); primarystage.show(); }} EventExample Projesi

Olay İşleme Olay Tipleri Olaylar kullanıcı eylemleri tarafından oluşturulur E.g. Fare tıklamaları, klavye butonu tıklamaları Her bir olay tanımlı bir olay tipine sahiptir class EventType<T extends Event> Örnekler: MouseEvent.MOUSE_PRESSED, MouseEvent.MOUSE_RELEASED Olay tipleri bir hiyerarşi içerisinde organize olmuştur Örnek: MouseEvent.ANY tüm fare olayı tiplerinin temel tipidir Her bir olay bir hedefe atanır Örnekler: Bir fare tıklamasının hedefi: fare imlecinin altındaki noddur Bir klavye butonu tıklamasının hedefi: giriş odağına (input focus) sahip metin alanıdır (text field)

Olay İşleme Dağıtım Zinciri Her bir olay için bir olay dağıtım zinciri oluşturulur (event dispatch chain) Bir GUI uygulaması için tipik bir zincir, sahne grafiği yapısını takip eder: Stage Scene Root node Target node Sahne alanı Sahne Kök nod Hedef nod Her bir zincir elemanı bir veya daha fazla olay filtresine (event filter) ve işleyicisine (event handler) sahip olabilir Filtreler ve işleyiciler belli bir olay tipi için tanımlanır Bir olay tipi için tanımlanan filtre veya işleyici bu olay tipinin tüm alt sınıfları için geçerlidir interface EventHandler<T extends Event> Hem filtreler hem de işleyiciler EventHandler arayüzünü gerçekleştirir

Olay İşleme (3/3) Olay yakalama aşaması (event capturing phase) Olay zincir boyunca hedef noda doğru aktarılır Zincirdeki olay filtreleri tarafından işlenir Her hangi bir olay filtresi, olayı tüketebilir (consuming the event) Olayın kabarcıklanma aşaması (event bubbling phase) Hedef nod tarafından işlenen olay, zincirde geriye doğru geri gönderilir Olay, zincirdeki olay işleyicileri tarafından işlenir Herhangi bir olay işleyicisi olayı tüketebilir Tüketilmiş bir olay, zincirde daha fazla işlenmez Olaylar, Event sınıfındaki consume() metodu kullanılarak tüketilirler

Olay İşleme Örneği FlowPane rootnode = new FlowPane(); rootnode.addeventfilter(mouseevent.mouse_released, new EventHandler<MouseEvent>() { public void handle(mouseevent e) { e.consume(); } }); Button button = new Button("my button"); button.addeventhandler(mouseevent.any, new EventHandler<MouseEvent>() { public void handle(mouseevent e) { System.out.println(e.getEventType().getName()); } }); rootnode.getchildren().add(button); EventProcessing Projesi

Tuval Üzerine Çizim Grafiksel nesnelerin bir yüzey üzerinde (Canvas) gösterilmesini sağlar Doğrular, çemberler, dikdörtgenler, metin, vs. javafx.scene.canvas.canvas sınıfı Node sınıfının bir alt sınıfı: sahne grafiğine eklenebilir Çizim metotları GraphicsContext sınıfında tanımlıdır Canvas sınıfının getgraphicscontext2d( ) metodunu çağırarak elde edilebilir Örnek metotlar: void strokeline(double startx, double starty, double endx, double endy) void filltext(string str, double topx, double topy)

Tuval Çizim Örneği Canvas canvas = new Canvas(300, 200); GraphicsContext gc = canvas.getgraphicscontext2d(); gc.strokeline(50, 50, 250, 50); gc.filltext("my text", 100, 100); gc.strokeline(50, 150, 250, 150); rootnode.getchildren().add(canvas); CanvasExample Projesi

Resimler javafx.scene.image.image sınıfı Grafiksel bir görüntü (resim) tanımlar Görüntü içeriği bir girdi akışı (input stream), URL veya görüntü dosyasından alınabilir Image(InputStream is) Image(String url) url geçerli bir URL veya dosya patikası olabilir javafx.scene.image.imageview sınıfı Node sınıfının alt sınıfıdır: sahne grafiğine eklenebilir Bir Image nesnesini yapıcısına parametre alır ImageView(Image image) Aynı Image nesnesi birden fazla ImageView nodu tarafından kullanılabilir

ImageView Örneği Image analogclock = new Image("Analog.png"); Image digitalclock = new Image("Digital.png"); ImageView iv1 = new ImageView(analogClock); ImageView iv2 = new ImageView(digitalClock); ImageView iv3 = new ImageView(analogClock); rootnode.getchildren().add(iv1); rootnode.getchildren().add(iv2); rootnode.getchildren().add(iv3); ImageViewExample Projesi

Efektler javafx.scene.effect.effect soyut sınıfı Örnek efekt alt sınıfları: Bloom: nodun daha parlak kısımlarının parlaklığını arttırır BoxBlur: nodu bulanıklaştırır Glow: yanma görüntüsü verir DropShadow: nodun arkasında gölge oluşturur InnerShadow: nodun içinde gölge oluşturur Reflection: nodun altındaö nodun yansıma görüntüsünü oluşturur Bir Node nesnesi üzerinde efekt gerçekleştirmek için: void seteffect(effect effect): Node sınıfındaki metot

Efekt Örneği Image analogclock = new Image("Analog.png"); Image digitalclock = new Image("Digital.png"); ImageView iv1 = new ImageView(analogClock); iv1.seteffect(new BoxBlur()); ImageView iv2 = new ImageView(digitalClock); iv2.seteffect(new Reflection()); rootnode.getchildren().add(iv1); rootnode.getchildren().add(iv2); EffectsExample Projesi

Dönüşümler javafx.scene.transform.transform temel sınıfı Temel dönüşüm alt sınıfları: Rotate, Scale, Shear, Translate Bir noda, birden fazla dönüşüm uygulanabilir Bir noda uygulanan dönüşümlerin bir listesini almak için: ObservableList<Transform> gettransforms() Noda yeni bir dönüşüm eklemek veya noddan bir dönüşüm silmek için: Dönüşüm listesi üzerinde add() veya remove() metotları çağırılır Dönüşümler nod özelliği olarak uygulanabilir: Örnek: void setrotate(double value)

Dönüşüm Örneği Image analogclock = new Image("Analog.png"); Image digitalclock = new Image("Digital.png"); ImageView iv1 = new ImageView(analogClock); iv1.gettransforms().add(new Scale(0.8, 2)); ImageView iv2 = new ImageView(digitalClock); iv2.setrotate(45); rootnode.getchildren().add(iv1); rootnode.getchildren().add(iv2); TransformsExample Projesi