JavaFX Basics

Transkript

JavaFX Basics
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)
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)
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
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ı
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
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ç
Ç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
Ç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
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ı
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
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
Ö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
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)
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
Ö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)
Ö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
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
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
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());
num.set(24.4);
System.out.println(division.getValue());
denom.set(12.2);
System.out.println(division.getValue());
// 0.2
// 4.0
// 2.0
BindingExample Projesi
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
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);
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
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
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
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

Benzer belgeler

JavaFX Basics

JavaFX Basics final Button button = new Button("my button"); button.setOnAction(new EventHandler() { public void handle(ActionEvent event) { button.setText("pressed"); }}); rootNode.getChildren().ad...

Detaylı