11- Java GUI Programlama

### Java GUI Uygulamaları: Swing ve JavaFX


Java'da GUI (Grafik Kullanıcı Arayüzü) uygulamaları oluşturmak için iki popüler kütüphane bulunmaktadır: Swing ve JavaFX. Her ikisi de Java'nın GUI geliştirme ihtiyaçlarını karşılamak için kullanılır, ancak farklı yaklaşımlar ve özellikler sunar.


#### Swing ile Temel GUI Uygulamaları


Swing, Java'nın eski GUI kütüphanelerinden biridir ve AWT (Abstract Window Toolkit) üzerine inşa edilmiştir. Aşağıda Swing kullanarak basit bir GUI uygulaması örneği verilmiştir.


##### Basit Bir Swing Uygulaması


```java

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;


public class SwingExample {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Swing Example");

        JPanel panel = new JPanel();


        JLabel label = new JLabel("Hello, Swing!");

        JButton button = new JButton("Click Me");


        button.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                label.setText("Button Clicked!");

            }

        });


        panel.add(label);

        panel.add(button);

        frame.add(panel);


        frame.setSize(300, 200);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

    }

}

```


- **JFrame:** Pencere oluşturur.

- **JPanel:** İçerik paneli sağlar.

- **JLabel:** Metin etiketleri sağlar.

- **JButton:** Buton oluşturur.

- **ActionListener:** Buton tıklama olayını dinler.


##### Event Handling (Olay Yönetimi)


Swing'de olayları işlemek için `ActionListener` ve diğer olay dinleyiciler kullanılır. Yukarıdaki örnekte, bir butona tıklama olayı işlenmiştir.


#### JavaFX ile Temel GUI Uygulamaları


JavaFX, daha modern bir GUI kütüphanesidir ve daha zengin grafiksel özellikler sunar. JavaFX ile GUI uygulamaları oluşturmak daha esnek ve güçlüdür.


##### Basit Bir JavaFX Uygulaması


```java

import javafx.application.Application;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.control.Label;

import javafx.scene.layout.VBox;

import javafx.stage.Stage;


public class JavaFXExample extends Application {

    @Override

    public void start(Stage primaryStage) {

        Label label = new Label("Hello, JavaFX!");

        Button button = new Button("Click Me");


        button.setOnAction(event -> label.setText("Button Clicked!"));


        VBox vbox = new VBox(10, label, button);

        Scene scene = new Scene(vbox, 300, 200);


        primaryStage.setTitle("JavaFX Example");

        primaryStage.setScene(scene);

        primaryStage.show();

    }


    public static void main(String[] args) {

        launch(args);

    }

}

```


- **Application:** JavaFX uygulaması için temel sınıftır.

- **Stage:** Ana pencereyi temsil eder.

- **Scene:** Pencere içeriğini temsil eder.

- **VBox:** Dikey düzenleyici (layout) sağlar.

- **Button:** Buton oluşturur.

- **setOnAction:** Buton tıklama olayını dinler.


##### Event Handling (Olay Yönetimi)


JavaFX'de olayları işlemek için lambda ifadeleri veya anonim sınıflar kullanılır. Yukarıdaki örnekte, buton tıklama olayı lambda ifadesiyle işlenmiştir.


### Kullanıcı Girişi İşlemleri


Her iki kütüphane de kullanıcı girişi işlemlerini destekler.


#### Swing'de Kullanıcı Girişi


```java

import javax.swing.JTextField;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;


public class SwingUserInput {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Swing User Input");

        JPanel panel = new JPanel();


        JTextField textField = new JTextField(20);

        JButton button = new JButton("Submit");


        button.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                String input = textField.getText();

                System.out.println("User Input: " + input);

            }

        });


        panel.add(textField);

        panel.add(button);

        frame.add(panel);


        frame.setSize(300, 200);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

    }

}

```


- **JTextField:** Metin giriş alanı sağlar.

- **getText():** Kullanıcının girdiği metni alır.


#### JavaFX'de Kullanıcı Girişi


```java

import javafx.application.Application;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.control.TextField;

import javafx.scene.layout.VBox;

import javafx.stage.Stage;


public class JavaFXUserInput extends Application {

    @Override

    public void start(Stage primaryStage) {

        TextField textField = new TextField();

        Button button = new Button("Submit");


        button.setOnAction(event -> {

            String input = textField.getText();

            System.out.println("User Input: " + input);

        });


        VBox vbox = new VBox(10, textField, button);

        Scene scene = new Scene(vbox, 300, 200);


        primaryStage.setTitle("JavaFX User Input");

        primaryStage.setScene(scene);

        primaryStage.show();

    }


    public static void main(String[] args) {

        launch(args);

    }

}

```


- **TextField:** Metin giriş alanı sağlar.

- **getText():** Kullanıcının girdiği metni alır.


### Özet


Bu ders notları, Java'da GUI uygulamaları oluşturmak için Swing ve JavaFX kullanımı, olay yönetimi ve kullanıcı girişi işlemleri konularını kapsamaktadır. Swing, daha eski bir GUI kütüphanesi olup, temel GUI ihtiyaçlarını karşılamak için yeterlidir. JavaFX ise daha modern ve esnek bir GUI kütüphanesi olup, zengin grafiksel özellikler sunar. Her iki kütüphane de kullanıcı girişi ve olay yönetimi gibi temel işlemleri destekler ve farklı gereksinimlere göre tercih edilebilir.