Java AWT, Swing ve JavaFX

Java ile görsel arayüz oluşturmak için kullanılan AWT, Swing ve JavaFX kütüphaneleri nedir, ne işe yarar ve kullanımı ile ilgili bilgiler yer alıyor.

AWT nedir?

AWT (Abstract Window Toolkit) Java ile görsel arayüz oluşturmak için kullanılan çeşitli bileşen ve yardımcı sınıfların olduğu pakettir.

Sınıflar java.awt paketinde yer alır.

AWT java.awt.Component sınıfından türeyen Button, Label, Checkbox, Choice, List, Container gibi bileşenlere sahiptir.

Container sınıfından türeyen Window ve Panel bileşenleri yer alır.

Window sınıfından türeyen Frame ve Dialog sınıfları ise pencere oluşturmak, Button, Label gibi bileşenleri barındırmak için kullanılır.

Panel sınıfı ise sadece Button, Label bileşenlerini barındırmak için kullanılır.

AWT kullanımı

Aşağıda AWT kullanılarak basit bir pencere oluşturulmuştur.

public class JavaGui {

    public static void main(String[] args) {
        Frame pencere = new Frame();
        pencere.setTitle("Java AWT");
        pencere.setSize(300, 200);

        Label label = new Label("www.yusufsezer.com");
        label.setBounds(50, 50, 150, 20);
        pencere.add(label);

        Button button = new Button("Tıkla");
        button.setBounds(50, 70, 60, 20);
        pencere.add(button);

        pencere.setLayout(null);
        pencere.setLocationRelativeTo(null);
        pencere.setVisible(true);
    }

}

AWT bileşenler üzerinde gerçekleşen tıklama(MouseEvent), yazma(KeyEvent) gibi olayları işlemek için java.awt.event paketine sahiptir.

Paket içerisinde ActionEvent, MouseEvent, MouseWheelEvent, KeyEvent, ItemEvent, TextEvent, AdjustmentEvent, WindowEvent, ComponentEvent, ContainerEvent, FocusEvent olayları yer alır.

Aşağıda Button ve Frame bileşenlerinde gerçekleşen ilgili olaylar yönetilmiştir.

public class JavaGui {

    public static void main(String[] args) {
        Frame pencere = new Frame();
        pencere.setTitle("Java AWT");
        pencere.setSize(300, 200);

        Label label = new Label("www.yusufsezer.com");
        label.setBounds(50, 50, 150, 20);
        pencere.add(label);

        Button button = new Button("Tıkla");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                label.setText("Yusuf SEZER");
            }
        });
        button.setBounds(50, 70, 60, 20);
        pencere.add(button);

        pencere.setLayout(null);
        pencere.setLocationRelativeTo(null);
        pencere.setVisible(true);
        pencere.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                pencere.dispose(); //System.exit(0);
            }

        });
    }

}

Olayları yönetmek için çeşitli yöntemler vardır.

Yukarıda örnekte sınıf içerisinde ActionListener arayüzünün implemente edilmesi ve WindowAdapter sınıfındaki metodun override(ezilmesi) yöntemi yer almaktadır.

NOT: Adapter sınıfları yine bu arayüzleri içeriği boş olarak implemente eder.

NOT2: Bu sınıflar kullanılarak arayüzler kullanıldığında tüm metotların implemente edilme zorunluluğu ortadan kalkar.

AWT paketi işletim sistemi ile ilgili bilgi almak için Toolkit sınıfına sahiptir.

public class JavaGui {

    public static void main(String[] args) {

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension boyut = toolkit.getScreenSize();
        System.out.println("Genişlik: " + boyut.width);
        System.out.println("Yükseklik: " + boyut.height);

    }

}

AWT ile oluşturulan bileşenler platform-işletim sistemi bağımlıdır.

Bundan dolayı işletim sistemine göre bileşenlerin görünüm farklı olacaktır.

Swing nedir?

Swing, AWT gibi java ile görsel arayüz oluşturmak için kullanılan çeşitli bileşen ve sınıfların olduğu pakettir.

Sınıflar javax.swing paketinde yer alır.

Swing yapısı ile AWT yapısı arasındaki fark Swing bileşenlerinin J ile başlaması ve swing kütüphanesinin daha fazla bileşene sahip olmasıdır.

Swing kütüphanesinin çıkış neden AWT kütüphanesinin Java’nın WORA olarak adlandırıldığı “bir kere yaz her yerde çalıştır” prensibine uymamasıdır.

AWT kütüphanesinde yer alan ve bileşenlerin işletim sistemine göre farklılık göstermesi Swing Look and Feel özelliği ile ortadan kaldırılmıştır.

Swing kullanımı

Aşağıda swing kullanılarak basit bir pencere oluşturulmuştur.

public class JavaGui {

    public static void main(String[] args) {
        JFrame pencere = new JFrame();
        pencere.setTitle("Java Swing");
        pencere.setSize(300, 200);

        JLabel label = new JLabel("www.yusufsezer.com");
        label.setBounds(50, 50, 150, 20);
        pencere.add(label);

        JButton button = new JButton("Tıkla");
        button.setBounds(50, 70, 60, 20);
        pencere.add(button);

        pencere.setLayout(null);
        pencere.setLocationRelativeTo(null);
        pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pencere.setVisible(true);

    }

}

Swing bileşenleri üzerinde gerçekleşen olayları işlemek için AWT paketinde yer alan sınıfları kullanır.

public class JavaGui {

    public static void main(String[] args) {
        JFrame pencere = new JFrame();
        pencere.setTitle("Java AWT");
        pencere.setSize(300, 200);

        JLabel label = new JLabel("www.yusufsezer.com");
        label.setBounds(50, 50, 150, 20);
        pencere.add(label);

        JButton button = new JButton("Tıkla");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                label.setText("Yusuf SEZER");
            }
        });
        button.setBounds(50, 70, 60, 20);
        pencere.add(button);

        pencere.setLayout(null);
        pencere.setLocationRelativeTo(null);
        pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pencere.setVisible(true);
    }

}

Bileşen yerleşimi

AWT ve Swing ile bileşenlerin yerleşimi için AWT kütüphanesinde yer alan BorderLayout, FlowLayout, GridLayout, CardLayout, GridBagLayout sınıf kullanılabilir.

Ayrıca swing paketinde yer alan BoxLayout, GroupLayout, ScrollPaneLayout, SpringLayout sınıfları da kullanılabilir.

Bileşen yerleşimi için birden fazla sınıf olsa da bileşen yerleşiminde NetBeans Matisse, Eclipse WindowBuilder gibi araçların kullanımı faydalı olacaktır.

JavaFX nedir?

JavaFX  AWT ve Swing gibi görsel arayüz oluşturmak için kullanılan içerisinde bir çok bileşen, efekt ve özelliğin yer aldığı pakettir.

JavaFX içerisinde AWT ve Swing kütüphanelerinde olan bileşenlere ek bileşenler, yerleşim düzeni, hazır grafik bileşenleri, 2b-3b grafikler, ses ve video bileşenleri içerir.

AWT ve Swing yapısından farklı olarak bileşenleri XML biçiminde oluşturmak için FXML ve görsel biçimlendirme için CSS özelliğini destekler.

JavaFX Java 8 ile Java platformuna dahil edilmiş daha sonra Java 11 ile birlikte platformdan çıkarılmıştır.

JavaFX kullanımı

Aşağıda JavaFX kullanılarak basit bir pencere oluşturulmuştur.

public class JavaGui extends Application {

    Stage pencere;
    Scene sahne;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        pencere = primaryStage;
        pencere.setTitle("JavaFX");

        Label label = new Label("www.yusufsezer.com");
        Button button = new Button("Tıkla");

        VBox vBox = new VBox(10);
        vBox.setPadding(new Insets(10));
        vBox.getChildren().add(label);
        vBox.getChildren().add(button);

        sahne = new Scene(vBox, 300, 200);
        pencere.setScene(sahne);
        pencere.show();
    }

}

JavaFX bileşenler üzerinde gerçekleşen olayları işlemek için AWT ve Swing kütüphanelerinden farklı olarak javafx.event paketine sahiptir.

public class JavaGui extends Application {

    Stage pencere;
    Scene sahne;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        pencere = primaryStage;
        pencere.setTitle("JavaFX");

        Label label = new Label("www.yusufsezer.com");
        Button button = new Button("Tıkla");
        button.setOnAction(e -> label.setText("Yusuf SEZER"));

        VBox vBox = new VBox(10);
        vBox.setPadding(new Insets(10));
        vBox.getChildren().add(label);
        vBox.getChildren().add(button);

        sahne = new Scene(vBox, 300, 200);
        pencere.setScene(sahne);
        pencere.show();
    }

}

NOT: Kod miktarını azaltmak için Java 8 ile birlikte gelen lambda ifadesi kullanılmıştır.

Bileşen olaylarını işlemek için setOn ile başlayan metotlar kullanılır.

JavaFX AWT ve Swingden farklı olarak FXM ve CSS destekler.

Bu yapı sayesinde web sayfalarında HTML, CSS Mobil uygulamalardaki XML tasarımı, .NET platformunda yer alan XAML yapısı gibi görsel arayüz tasarımı yapılabilir.

AWT ve Swing yapısında olduğu gibi JavaFX ile kod üzerinden yerleşim zor olacağından Scene Builder aracının kullanımı faydalı olacaktır.

SON

Masüstü uygulamalar olarak adlandırılan, bilgisayar üzerinde çalışan uygulamalar geliştirme ve kurulum gibi maliyetlerden dolayı kullanımı azalmaktadır.

Diğer taraftan geliştirme kolaylığı ve kurulum ihtiyacı olmadığından web tabanlı uygulamaların kullanımı artmaktadır.

Bundan dolayı masaüstü uygulama yerine web tabanlı uygulama geliştirmek tercih edilebilir.

Ancak java ile masaüstü uygulama geliştirmek istenildiğinde JavaFX veya Swing kütüphanesinin kullanımı faydalı olacaktır.

Java Swing örneğine buradan ulaşabilirsiniz.

JavaFX örneğine buradan ulaşabilirsiniz.

Java Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!