Scrollozzunk!

Az előző részben összejött az elugró gomb, ugye? Valami ilyesmi?

Random random=new Random();

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        button.setLocation(random.nextInt(80),random.nextInt(50));              
    }
});

Scroll

A scroll jelentése tekercs - amire az egyiptomimak írtak. Amikor ezt tekergetik, olyan, mintha menne rajta a szöveg, így ugyanezt a kifejezést használják arra is, hogy futó szöveg. Futtassuk meg a labelünket! Ehhez:

public class HelloGui {
    public static void main(String[] args) {
        JFrame frame=new JFrame();
        frame.setSize(200, 100);
        frame.setTitle("Elso program");
        frame.setVisible(true);
        frame.setLayout(null);

        JLabel label=new JLabel("Gipsz Jakab");
        frame.add(label);
        // tegyük sokkal jobbrább, 150-re
        label.setBounds(150, 0, 100, 21); 

        JButton button=new JButton("Ok");
        frame.add(button);
        button.setBounds(5, 25, 75, 21);

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // setLocation-al odébbrakjuk 
                label.setLocation(label.getX()-1, label.getY());                
            }
        });
    }   
}

Feladat: Meg tudod magyarázni ezt a kifejezést?

label.setLocation(label.getX()-1, label.getY());

Csak getter és setter, jól mondom? De mit csinál?

Próbáld ki a progit is. Kattintgass a gombra, mi történik?

Timer

A Timer azt jelenti, időzítő. Igazán nem szeretném én nyomogatni a gombot, jó lenne ha valaki magától mondjuk 20ms-oknént meghívna valami listenert nekem.

Természetesen van rá egy osztály, úgy hívják, hogy Timer. Természetesen adni kell neki egy listenert, amit hívogat. A button actionListenerjét is bennehagytam, az most a szöveget változtatja meg.

public class HelloGui {
    public static void main(String[] args) {
        JFrame frame=new JFrame();
        frame.setSize(200, 100);
        frame.setTitle("Elso program");
        frame.setVisible(true);
        frame.setLayout(null);

        JLabel label=new JLabel("Gipsz Jakab");
        frame.add(label);
        label.setBounds(200, 0, 100, 21);

        JButton button=new JButton("Ok");
        frame.add(button);
        button.setBounds(5, 25, 75, 21);

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // legyen más a szövege
                label.setText("Katt!");             
            }
        });

        Timer timer=new Timer(20, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // menjen odébb a label
                label.setLocation(label.getX()-1, label.getY());
            }
        });
        timer.start();
    }   
}

java.util.Timer vagy javax.swing.Timer?

Ebben a programban használunk egy Timer osztályt. Amikor importálod, akkor az Eclipse megkérdezi, hogy melyiket - hiszen kettő van belőle. A javax.swing.Timer az, amelyikre szükségünk van.

Próbáld csak ki! Fúú, szerintem nagyon aranyos!

Feladat: Most a timer 20 ms-ként odébb teszi a labelt. Mi történik, ha eközben megnyomod a gombot? Vajon egyszerre fut most két dolog?

Feladat: Mi történik, ha megváltoztatod a 20-at? Próbáld ki!

Feladat: Minden komponensnek aminek szövege van, van egy setFont metódusa is. Ide egy Font objektumot lehet átadni, amit meg egy konstruktorral lehet létrehozni, például:

label.setFont(new Font("Courier", Font.BOLD,22));

Próbálj ki 2-3 féle fontot. A gépeden található fontok neveit például a Word-ben tudod megnézni a betűtípus-választóban.

Próbáld ki a dőlt betűs írást. (Hogyan? A Font.BOLD-hoz hasonlóan biztos van Font.ITALIC is, nem?)

Előfordulhat, hogy a szöveg nem fér ki a labelnek beállított téglalapba (setBounds). Ekkor a szöveg egy része kipontozódik. Ahhoz hogy elférjen, növeld meg a setBounds-ban használt méretet.

Scroll