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 (genellikle ButtonGroup 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: Bir Stage içindeki içeriği (bileşenleri) barındıran bir konteynerdir. Bir Stage'in yalnızca bir Scene'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. BorderPaneHBoxVBoxGridPane).

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.