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));
}
});
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?
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();
}
}
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.