javafx temelleri (2) -...

25
JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts), Çalışma Ortamları ve Dağıtım Oluşturma, JavaFX Özellikleri (JavaFX Properties), Gözlenebilirlik (Observability), Bağlanımlar (Bindings) ve JavaFX Koleksiyonları (JavaFX Collectıons)

Upload: vanthu

Post on 06-Dec-2018

241 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts), Çalışma Ortamları ve Dağıtım

Oluşturma, JavaFX Özellikleri (JavaFX Properties), Gözlenebilirlik (Observability), Bağlanımlar (Bindings) ve JavaFX Koleksiyonları (JavaFX

Collectıons)

Page 2: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Araç İpuçları (Tooltips)

• Farenin bir GUI bileşeninin üzerine gelmesi durumunda gösterilen mesajlardır

• Yazılımın kullanılabilirliğini ve sezgiselliğini arttırır

• javafx.scene.control.Tooltip sınıfı

• Control sınıfı (Node sınıfının alt sınıfı) nesnelerine atanabilir • Control nesneleri: kullanıcı tarafından kullanılabilen (durumu değiştirilebilen)

nodlardır

• javafx.scene.control.Control soyut sınıfı

• Bir Control nesnesine araç ipucu atamak için: • void setTooltip(Tooltip tip)

• Tooltip sınıfı yapıcısı: Tooltip(String text)

Page 3: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Araç İpucu Örneği

Button button = new Button("my button");

button.setTooltip(new Tooltip "Button usage tip"));

Label label = new Label("my label");

label.setTooltip(new Tooltip("This is a label"));

rootNode.getChildren().add(button);

rootNode.getChildren().add(label);

TooltipExample Projesi

Page 4: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Yazı Tipleri

• Metnin görüntüsünü tanımlar (boyut ve karakterlerin görünümü)

• javafx.scene.text.Font sınıfı

• Karakterlerin görünümü yazı tipi yüzü (font face) ile tanımlıdır

• Yazı tipi boyutu nokta (point) cinsinden ifade edilir (1 nokta 1/72 inçtir)

• Sınıf yapıcıları: • Font(double size)

• “System” varsayılan yazı tipi yüzünü kullanır

• Font(String name, double size) • name: yazı tipi yüzü adı

Page 5: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Yazı Tipi Örneği

Canvas canvas = new Canvas(300, 200);

GraphicsContext gc = canvas.getGraphicsContext2D();

gc.fillText("normal text", 50, 50);

gc.setFont(new Font(20));

gc.fillText("large text", 50, 100);

gc.setFont(new Font("Verdana", 20));

gc.fillText("large Verdana text", 50, 150);

rootNode.getChildren().add(canvas);

FontExample Projesi

Page 6: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Görsel Arayüzü (UI) Uygulama Mantığından Ayırmak • Cascading Style Sheets (CSS)

• Sahne grafiğindeki herhangi bir noda uygulanabilir

• Çalışma zamanında herhangi bir sahneye uygulanabilir • Uygulama görüntüsü dinamik olarak değiştirilebilir

• CSS dosyalararı ikili formata çevrilebilir • Çalışma zamanında ayrıştırma (parsing) yükü azalır ve uygulama performansı artar

• FXML: XML tabanlı işaret dili (markup language) • Sahne grafiği FXML dosyası içerisinde nodların bir hiyerarşisi olarak

gösterilebilir

• JavaFX Sahne Oluşturucu (JavaFX Scene Builder) • FXML dosyaları oluşturmak için kullanılan grafiksel araç

Page 7: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Çalışma Ortamları (1/2)

• Kendi başına çalışan program (standalone program) • Application.launch() metodunu çağıracak statik bir main() metodu gerektirir

• Java Web Start • Uygulama, bir web sayfasındaki bağlantıya web tarayıcısından tıklanarak

indirilir ve çalıştırılır

Page 8: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Çalışma Ortamları (2/2)

• Bir web sayfası içerisinde JavaScript kodu ile birlikte • Uygulama, bir web sayfası web tarayıcısında yüklendiğinde JavaScript

aracılığıyla çalıştırılır

• Uygulama web sayfası ile iletişim kurabilir

• Sınırlandırılmış ortam (sandbox) • Web tarayıcısından veya bir web sayfasından başlatılan uygulamalarda

kullanılır

• Zararlı kodlara karşı koruma sağlar

Page 9: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

NetBeans ile Paketleme ve Dağıtım

• Projeler (Projects) penceresinden JavaFX projesini seçin

• Menülerden Run → Build Project

• Proje dizininde build ve dist dizinleri oluşturulacaktır

• build dizini: derlenmiş Java sınıfları (.class dosyaları)

• dist dizini: kullanıcıya dağıtılabilir dosyalar • .jar file: tek başına çalıştırılabilir uygulama

• .jnlp file: uygulamayı Java Web Start ile çalıştırır

• .html file: uygulamanın gömüldüğü web sayfası

Page 10: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

NetBeans ile Kurulum Dosyası Oluşturma

• NetBeans ile JavaFX uygulamalarınız için platform bağımlı kurulum dosyaların oluşturabilirsiniz. Örn: Windows için installer.exe

• Şu an için desteklenen platformlar: • Windows

• MacOS

• Linux

• Daha fazla detay için: https://blogs.oracle.com/talkingjavadeployment/entry/native_packaging_for_javafx

Page 11: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

JavaFX Özellikleri

• Stantart Java özellikleri JavaBeans Bileşen Mimarisini kullanır • Gizli (private) sınıf üyelerine standartlaştırılmış açık (public) metotlar

kullanılarak erişilebilir

• Getter ve setter metotları

• JavaFX özellikleri JavaBeans özelliklerini genişletir

• Her bir Java temel veri tipi için özellik sınıfları tanımlıdır • Tüm özellik sınıfları Property<T> arayüzünü gerçekleştirir

• JavaFX özellikleri, özellik sınıflarının örnekleridir

• Özellik değerleri için getter ve setter metotları bulunur

• Özelliklerin kendileri için getter metotları vardır

Page 12: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Özellikler Örneği

class Exam {

private final FloatProperty score = new SimpleFloatProperty(6);

public float getScore() {

return score.get();

}

public void setScore(float value) {

score.set(value);

}

public FloatProperty scoreProperty() {

return score;

}

}

PropertiesExample Projesi

Page 13: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Gözlenebilirlik – Observable Arayüzü

• Gözlenebilir nesne (observable object), içeriği değiştiğinde kendisini gözleyen gözlemcilere (observer) haber verir

• javafx.beans.Observable arayüzü

• void addListener(InvalidationListener listener)

• void removeListener(InvalidationListener listener)

Page 14: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Gözlenebilirlik – InvalidationListener Arayüzü

• javafx.beans.InvalidationListener arayüzü • void invalidated(Observable observable)

• invalidated() metodu gözlemlenebilir nesne içeriği geçersiz olduğunda çağırılır • Bir değer, içeriği en son değiştiğinden beri tekrar alınmamışsa geçersiz olur

Page 15: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Özellik Gözlenebilirliği

• Observable arayüzünü temel alan ObservableValue<T> arayüzü • void addListener(ChangeListener<? super T> listener)

• void removeListener(ChangeListener<? super T> listener)

• T getValue()

• Gözlenebilir değer değiştiğinde, getValue() metotu çağırılana kadar geçersiz olur

• Property<T> arayüzü ObservableValue<T> arayüzünü temel alır

• Gözlemci nesneler ChangeListener<T> arayüzünü gerçekleştirir • void changed(ObservableValue<? extends T> observable, T oldValue, T newValue)

Page 16: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Özellik Gözlemcisi Örneği

Exam mathsExam = new Exam();

mathsExam.scoreProperty().addListener(

new ChangeListener() {

public void changed(ObservableValue o,

Object oldVal, Object newVal) {

System.out.println("Old score " + oldVal +

", new score " + newVal);

}

});

mathsExam.setScore(10);

PropertiesExample Projesi

Page 17: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Bağlanımlar (Bindings) - Bağlılıklar

• Bağlı nesneler belli bir değeri bir veya daha fazla kaynak nesneyi kullanarak hesaplarlar

• Kaynak nesneler: bağlılıklar • ObservableValue<T> arayüzünü gerçekleştirirler

Page 18: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Bağlanımlar (Bindings)

• Bağlanım bağlılıklarını gözlemlerler

• Binding<T> arayüzü • ObservableValue<T> arayüzünü temel alır

• Bağlanımlar gözlemlenebilirdir. Bu yüzden başka bağlanımlar için bir bağlılıktır

• Bağlanımlar, Bindings sınıfının statik metotları kullanılarak oluşturulurlar

• Örnek bağlanımlar: • Matematiksel, mantıksal veya String ifadeler

Page 19: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Bağlanım Örneği

DoubleProperty num = new SimpleDoubleProperty(1.22);

DoubleProperty denom = new SimpleDoubleProperty(6.1);

NumberBinding division = Bindings.divide(num, denom);

System.out.println(division.getValue()); // 0.2

num.set(24.4);

System.out.println(division.getValue()); // 4.0

denom.set(12.2);

System.out.println(division.getValue()); // 2.0

BindingExample Projesi

Page 20: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Bağlanım Gözlemcisi Örneği

Exam mathsExam = new Exam();

Exam physicsExam = new Exam();

NumberBinding avgScore = Bindings.divide(

Bindings.add(mathsExam.scoreProperty(),

physicsExam.scoreProperty()), 2);

avgScore.addListener(new InvalidationListener() {

public void invalidated(Observable o) {

System.out.println("Observable invalidated");

}

});

mathsExam.setScore(10); // Observer is notified

System.out.println("Average score: " + avgScore.getValue());

BindingObserverExample Projesi

Page 21: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Bağlanım Alıştırması

• Student sınıfı özellikleri: • studyingDays: tamsayı özellik

• studyingHours: float özellik

• Günlük ortalama çalışma saatini gözlemleyin

Student myStudent = new Student();

myStudent.setStudyingDays(1);

myStudent.setStudyingHours(6);

...

myStudent.setStudyingDays(myStudent.getStudyingDays() + 1);

myStudent.setStudyingHours(myStudent.getStudyingHours() + 9);

Page 22: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

Bağlanım Alıştırması Çözümü

NumberBinding hoursPerDay = Bindings.divide(

myStudent.studyingHoursProperty(),

myStudent.studyingDaysProperty());

hoursPerDay.addListener(new ChangeListener() {

public void changed(ObservableValue o,

Object oldVal, Object newVal) {

System.out.println("average hours per day: " + newVal);

}

});

BindingExercise Projesi

Page 23: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

JavaFX Koleksiyonları

• Standart Java koleksiyonları: List<T>, Map<K, V>

• JavaFX koleskiyonları liste (list) ve haritalara (map) gözlenebilirlik ekler: • ObservableList, ObservableMap arayüzleri Observable arayüzünü temel alır

• ListChangeListener, MapChangeListener: gözlemci arayüzleri

• ListChangeListener.Change, MapChangeListener.Change: gözlemcilere bildirilen değişiklikler

• ObservableList ve ObservableMap nesneleri, listeleri ve haritaları kapsayacak şekilde oluşturulur: FXCollections

Page 24: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

JavaFX Koleksiyonu Örnekleri (1/2)

List<String> list = new ArrayList<String>();

ObservableList<String> observableList =

FXCollections.observableList(list);

observableList.addListener(

new ListChangeListener() {

public void onChanged (

ListChangeListener.Change change) {

System.out.println("list has changed");

}

});

observableList.add("first item");

CollectionsExamples Projesi

Page 25: JavaFX Temelleri (2) - leventbayindir.netleventbayindir.net/wp-content/uploads/2013/07/bim205-hafta10.pdf · JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts),

JavaFX Koleksiyonu Örnekleri (2/2)

Map<String, String> map = new HashMap<String, String>();

ObservableMap<String, String> observableMap =

FXCollections.observableMap(map);

observableMap.addListener(new MapChangeListener() {

public void onChanged(MapChangeListener.Change change)

{

System.out.println("map has changed");

}

});

observableMap.put("first key", "first value"); observableMap.put("second key", "second value");

observableMap.remove("first key");

CollectionsExamples Projesi