Java: GUI für Anfänger Teil 2

Im ersten Teil haben wir eine GUI mit einem Button, welcher sich über die gesamte Oberfläche erstreckt erstellt.

Falls es euch interessiert klickt hier.

Anmerkung: In diesem Teil gehe ich davon aus, dass ein Grundverständnis für Klassen vorhanden ist. 

Heute werden wir uns mit dem ActionListener beschäftigen, welcher uns es ermöglicht auf klicks zu reagieren.

Erstellen wir zunächst eine neue Klasse ich nenne diese GUIActionListener.

public class GUIActionListener implements ActionListener {
    private GUITutorial guiTut;

    public GUIActionListener(GUITutorial guiTut){
        this.guiTut = guiTut;
    }
}

Nun haben wir eine Klasse erstellt, welche eine Implementierung von dem ActionListener ist, diese enthält einen Konstruktor welche eine Bi-Direktionale Verbindung zur GUI haben wird. Alles was jetzt noch fehlt, ist die actionPerformed Methode zu überschreiben. In IntelliJ reicht es Alt+Enter zu drücken und "override methods" aus zu wählen. Der Code sollte danach wie folgt aussehen:

public class GUIActionListener implements ActionListener {
    private GUITutorial guiTut;

    public GUIActionListener(GUITutorial guiTut){
        this.guiTut = guiTut;
    }

    @Override
    public void actionPerformed(ActionEvent e) {

    }
}

Nun kümmern wir uns um den Inhalt der actionPerformed(ActionEvent e)-Methode. Der Methode wird ein Parameter übergeben, welcher alle nötigen Informationen, was passiert etc, enthält. Da wir aber nicht großartig daran interessiert sind was passiert sind sondern wissen wollen wer oder was diese Methode ausgelöst hat, erweitern wie sie wie folgt:

public class GUIActionListener implements ActionListener {
    private GUITutorial guiTut;

    public GUIActionListener(GUITutorial guiTut){
        this.guiTut = guiTut;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == guiTut.clickMe){
            System.out.println("Ich wurde gedrückt ...");
            System.exit(0);
        }   
    }
}

Um die Quelle zu finden, welche die Methode auslöst können wir the getSource()-Methode verwenden welche wir in dem übergebenen Parameter finden. Ich habe hier aus Gründen der Einfachheit ein String auf der Konsole ausgegeben und dann das Programm schließen lassen. Werfen wir nun ein Blick auf die Klasse vom letzten Teil und deren Erweiterung. Alle neuen Zeilen wurden ausreichend kommentiert.

public class GUITutorial extends JFrame {
    private JButton clickMe;
    private GUIActionListener guiListener; // eine Klassenvariable um guiListener überall in der KLasse verwenden zu können.
    // Für dieses Beispiel würde es theoretisch reichen, es im Konstruktor zu belassen.

    public GUITutorial(){
        guiListener = new GUIActionListener(this); // hier wird die Klasse initialisiert und ein verweis auf dieses Objekt übergeben

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Java GUI für Anfänger");
        setSize(new Dimension(800,600));
        setLocationRelativeTo(null);
        setVisible(true);

        clickMe = new JButton("Klick mich!");
        clickMe.addActionListener(guiListener); // einer der meisten Fehler diese Zeile zu vergessen ermöglicht es erst auf ein Klick zu reagieren.
        getContentPane().add(clickMe);
    }

    public static void main(String[] args) {
        new GUITutorial();
    }
}
Mehrere Elemente auf der Oberfläche:

Wir haben in Java viele Layout-Manager, am leichtesten ist der BorderLayout-Manager (auch der Standard Layout Manager eines Fensters). Um jetzt mehrere Elemente auf die GUI zu bekommen machen wir es wie folgt:

getContentPane().add(new JButton("OBEN"), BorderLayout.NORTH);
getContentPane().add(new JButton("LINKS"), BorderLayout.WEST);
getContentPane().add(new JButton("MITTIG"), BorderLayout.CENTER);
getContentPane().add(new JButton("RECHTS"), BorderLayout.EAST);
getContentPane().add(new JButton("UNTEN"), BorderLayout.SOUTH);

/* Zusammenfassend:
*
* - Wir haben im BorderLayout folgende Orietierungsmöglichkeiten:
*
* NORTH (Norden, also OBEN)
* SOUTH (Süden, also UNTEN)
*
* WEST (Westen, also LINKS)
* EAST (Osten, also RECHTS)
*
* CENTER (die Mitte des Fensters, denke ich ist selbst erklärend)
*
*/

Mit diesem Tutorial hoffe ich, habe ich euch den Einstieg in die Java GUI-Programmierung erleichtert, da die ActionListener Geschichte etwas gewöhnungsbedürftig ist wenn man z.B. von C# auf Java umsteigt. Als nächstes habe ich vor die paint-Methode des JFrames vor zu überschreiben um euch ein paar Dinge zu zeigen :)

Kommentare

Beliebte Posts aus diesem Blog

[ENGLISH] Capture the Flag at UCF - Write Up - Crypto - XORLY

Dr. Evil's Bombe (Binary Bomb Lab) | Teil 1