Ders İçeriği
Java, masaüstü uygulamaları geliştirmek için iki ana grafiksel kullanıcı arayüzü (GUI) aracı sunar: Swing ve JavaFX. Swing, Java'nın daha eski ve köklü GUI aracı iken, JavaFX daha modern, zengin özelliklere sahip ve performans odaklı bir alternatiftir. Bu bölümde her iki teknolojiyi de temel düzeyde inceleyeceğiz.
Swing ile GUI Programlama
Swing, Java Foundation Classes (JFC) ailesinin bir parçasıdır ve platform bağımsız GUI uygulamaları geliştirmek için kullanılır. Hafif (lightweight) bileşenlere sahiptir, yani işletim sisteminin kendi GUI bileşenlerini kullanmak yerine kendi bileşenlerini çizer. Bu, uygulamaların farklı işletim sistemlerinde aynı görünmesini sağlar.
Temel Swing Bileşenleri
JFrame
: Bir pencereyi temsil eden üst düzey bir konteynerdir. Uygulamanın ana penceresi olarak kullanılır.JPanel
: Bileşenleri gruplamak için kullanılan genel amaçlı bir konteynerdir.JButton
: Tıklanabilir bir düğme.JLabel
: Metin veya resim görüntülemek için kullanılır.JTextField
: Tek satırlık metin girişi için kullanılır.JTextArea
: Çok satırlı metin girişi için kullanılır.JCheckBox
: Seçim kutusu.JRadioButton
: Radyo düğmesi (genellikleButtonGroup
ile kullanılır).JComboBox
: Açılır liste.
Basit Bir Swing Uygulaması
Bu örnek, bir pencere, bir etiket, bir metin alanı ve bir düğme içeren basit bir Swing uygulaması oluşturur. Düğmeye tıklandığında metin alanındaki metni etikete kopyalar.
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SwingOrnek {
public static void main(String[] args) {
// 1. JFrame oluşturma (ana pencere)
JFrame frame = new JFrame("Basit Swing Uygulaması");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Pencere kapatıldığında uygulamayı sonlandır
frame.setSize(400, 200); // Pencere boyutu
frame.setLocationRelativeTo(null); // Pencereyi ekranın ortasına konumlandır
// 2. JPanel oluşturma (bileşenleri gruplamak için)
JPanel panel = new JPanel();
frame.add(panel); // Paneli pencereye ekle
// 3. Bileşenler oluşturma
JLabel label = new JLabel("Merhaba Swing!");
JTextField textField = new JTextField(20); // 20 sütun genişliğinde metin alanı
JButton button = new JButton("Kopyala");
// 4. Bileşenleri panele ekleme
panel.add(label);
panel.add(textField);
panel.add(button);
// 5. Düğmeye olay dinleyici ekleme
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = textField.getText(); // Metin alanındaki metni al
label.setText(text); // Etiketin metnini değiştir
}
});
// 6. Pencereyi görünür yapma
frame.setVisible(true);
}
}
JavaFX ile GUI Programlama
JavaFX, Swing'e göre daha yeni ve modern bir GUI platformudur. Zengin grafik yetenekleri, CSS ile stil desteği, FXML ile arayüz tasarımı ve medya desteği gibi özellikler sunar. JavaFX, özellikle görsel olarak çekici ve etkileşimli masaüstü uygulamaları geliştirmek için tercih edilir.
Temel JavaFX Kavramları
Application
Sınıfı: Tüm JavaFX uygulamaları bu sınıftan türemelidir.start()
metodu, uygulamanın başlangıç noktasını tanımlar.Stage
: Bir pencereyi temsil eder.JFrame
'e benzer.Scene
: BirStage
içindeki içeriği (bileşenleri) barındıran bir konteynerdir. BirStage
'in yalnızca birScene
'i olabilir.- Düğüm (Node): Bir GUI bileşenini (düğme, etiket, metin alanı vb.) veya bir düzen yöneticisini (layout manager) temsil eder. Tüm görsel elemanlar düğümdür.
- Düzen Yöneticileri (Layout Managers): Bileşenlerin pencere içinde nasıl konumlandırılacağını ve boyutlandırılacağını belirler (örn.
BorderPane
,HBox
,VBox
,GridPane
).
Basit Bir JavaFX Uygulaması
Bu örnek, bir pencere, bir etiket, bir metin alanı ve bir düğme içeren basit bir JavaFX uygulaması oluşturur. Düğmeye tıklandığında metin alanındaki metni etikete kopyalar.
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class JavaFXOrnek extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Basit JavaFX Uygulaması");
// Bileşenler oluşturma
Label label = new Label("Merhaba JavaFX!");
TextField textField = new TextField();
textField.setPromptText("Buraya metin girin...");
Button button = new Button("Kopyala");
// Düğmeye olay dinleyici ekleme
button.setOnAction(e -> {
label.setText(textField.getText());
});
// Düzen yöneticisi (VBox) oluşturma ve bileşenleri ekleme
VBox root = new VBox(10); // 10 piksel aralıkla dikey düzen
root.setPadding(new Insets(10)); // Kenar boşlukları
root.getChildren().addAll(label, textField, button);
// Sahne oluşturma ve sahneyi pencereye atama
Scene scene = new Scene(root, 300, 150);
primaryStage.setScene(scene);
// Pencereyi görünür yapma
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
JavaFX Uygulamasını Çalıştırma Notu: Java 11 ve sonraki sürümlerde JavaFX, JDK'dan ayrı bir modül olarak dağıtılmaktadır. Bu nedenle, JavaFX uygulamalarını derlemek ve çalıştırmak için ek yapılandırma (modül yolu belirtme) gerekebilir. Genellikle Maven veya Gradle gibi bir yapı aracı kullanmak bu süreci kolaylaştırır.
Java'da GUI programlama, masaüstü uygulamaları geliştirmek için önemli bir alandır. Swing, daha eski ve geniş bir kullanıcı tabanına sahipken, JavaFX modern uygulamalar için daha güçlü ve esnek özellikler sunar. Hangi teknolojiyi seçeceğiniz, projenizin gereksinimlerine ve tercihlerinize bağlıdır. Bir sonraki derste İleri Seviye Konular (Lambda İfadeleri, Stream API, Modüller vb.) konusunu inceleyeceğiz.