Dulifuli tanulsága

Dulifulival sokat beszélgettünk, hogy hogyan is lehetne szebben programozni. Kiderült, hogy igaziból neki már van megoldása a hét pontra, csak nem mondta el, mert nem a jó kérdést tettem fel.

Lássuk, hogy mit tanultam tőle!

Ilyen a Swing:

import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class HelloGui {
    String name="Geza";

    public HelloGui() {
        JFrame frame=new JFrame("Hello");       
        frame.setLayout(new GridLayout(2, 2));
        frame.add(new JLabel("Név:"));
        JTextField nameEdit=new JTextField(name);
        frame.add(nameEdit);
        frame.add(new JLabel("Hello"));
        JLabel nameLabel=new JLabel(name);
        frame.add(nameLabel);

        nameEdit.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void removeUpdate(DocumentEvent e) {
                changed();
            }

            @Override
            public void insertUpdate(DocumentEvent e) {
                changed();
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                changed();
            }

            public void changed() {
                name=nameEdit.getText();
                nameLabel.setText(name);
            }

        });

        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

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

Jajj még margója sincsen, olyan ronda!

Ilyen lenne egyszerűbben:

public class HelloGui extends Form {
    String name="Geza";

    public HelloGui() {
        window()
        .text("Hello")
        .add(
                label("Nev:"),edit("name"),br(),
                label("Hello"),view("name")
        ) 
        .build();
    }

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

Rövidebb kód, szebb ablak!

Hátőőő, izé... Mondjuk lehet ellenkezni, hogy a .build() egy külön sor, de azt mondta Dulifuli, hogy így olvashatóbb... de nagyságrendileg tényleg csak egy sor egy dolog! Hűha!

Egy teljesen üres, haszontalan ablak:

public class HelloGui extends Form  {
    public static void main(String[] args) {        
        window().build();
    }
}

Egy teljesen üres, haszontalan ablak, a fejlécében a Hello szöveggel:

public class HelloGui extends Form  {
    public static void main(String[] args) {        
        window().text("Hello").build();
    }
}

Egy ablak fejléccel, benne egy Hello Geza felirattal, és mellette egy Ok gombbal:

public class HelloGui extends Form  {
    public static void main(String[] args) {        
        window().text("Hello").add(label("Hello Geza"),button("Ok")).build();
    }
}

Ugyanez szebben tagolva, amitől kicsit olvashatóbb lesz (látszik az add belseje):

public class HelloGui extends Form {
    public static void main(String[] args) {        
        window()
        .text("Hello")
        .add(
            label("Hello Geza"),button("Ok")
        )
        .build();
    }
}

Nem semmi, ugye? Csak ez az írásmód kicsit fura a pontokkal. Meg miért nincs pontosvessző a sorok végén. Meg hogy honnan jön az a window() meg label().

Most nehéz és ronda dolgok jönnek a 08-as fejezet folytatásaként, ugyanis megmutatom, hogyan készül egy framework. A türelmetlenek nyugodtan lapozzanak a 09-es fejezetre, ahol ezzel a frameworkkel fogunk nagyszerű programokat csinálni.