Java - JLabel i JButton


JLabel

Korak 1: Kreirajte novi projekat: File -> New Project. Kada ste kreirate novi projekati kreirajte i JFrame Form... kao što je prikazano na sljedećoj slici.




Korak 2: Nakon kreiranja JFrame Form treba da dobijete prikaz kao na sljedećoj slici i spremni ste za praćenje lekcije.




Kontrola JLabel je u stanju da predstavi tekstualni sadržaj. Da bismo postavili ovu klasu na panel, prevlačimo je sa palete panela na odgovarajuću poziciju panela aplikacije:




Takođe, ovu kontrolu možemo kreirati i postaviti na panel programabilno:

JLabel myLabel = new JLabel("Pozdrav, ovo je label!");
mainPanel.add(myLabel);



Svojstvo kontrole moguće je mjenjati iz grafičkog okruženja dvoklikom na kontrolu:




ili podešavanjem njenog text svojstva u sekciji Properties:




Programabilno, tekst svojstvo je moguće podesiti metodom setText() i preuzeti ga metodom getText(). Tekst unutar kontrole je moguće formatirati putem svojstva font.




Ako bismo svojstvo font menjali programabilno, koristili bismo klasu Font:

jLabel1.setFont(new Font("Verdana", Font.BOLD, 32));

Pored ovakve stilizacije, JLabel (kao i ostale JComponent klase) ima mogućnost prepoznavanja HTML tagova, što je veoma pogodno prilikom stilzacije teksta. Ako hoćemo da stilizujemo tekst kroz HTML, kompletan tekst moramo smjestiti unutar HTML taga:



<html>Volim <br> učiti <br>Javu <br>uz IT TUTORIJALE</html>

Prikaz koda iz gornjeg primjera izgledaće ovako:




Unutar kontrole moguće je emitovati i HTML elemente. Kod koji sljedi prikazaće sliku unutar kontrole:

<html><img src='http://www.google.com/images/logos/ps_logo2.png' /></html>

Ovaj kod dodajte kao u prekodnom primjeru kada smo dodavali teks u naš JLabel

Prikaz koda iz gornjeg primjera izgledaće ovako:




Ugrađeni HTML parser je u stanju da parsira čak i inline stilizaciju, pa će i sljedeći kod dati pravilan rezultat:

<html>
    <div style='color: red;'>Volim</div>
    <div style='color: blue;'>učiti</div>
    <div style='color: yellow;'>Javu</div>
    <div style='color: green;'>uz IT TUTORIJALE!</div>
</html>

Ovaj kod dodajte kao u prekodnom primjeru kada smo dodavali teks u naš JLabel

Prikaz koda iz gornjeg primjera izgledaće ovako:




Tekst unutar JLabel kontrole možemo ravnati horizontalno i vertikalno u odnosu na kontejner:

jLabel1.setHorizontalAlignment(JLabel.RIGHT);
jLabel1.setVerticalAlignment(JLabel.BOTTOM);

Prilikom ovog ravnanja koristimo konstante JLabel klase: LEFT, RIGHT, LEADING, TRAILING i CENTER – za horizontalno ravnanje i TOP, BOTTOM i CENTER – za vertikalno ravnanje. Unutar okruženja poravnanje se može podesiti svojstvima:

Podešavanje horizontalnog poravnanja




Podešavanje vertikalnog poravnanja




JLabel može da sadrži tekst, sliku ili tekst i sliku. Sljedeći konstruktor kreira JLabel kontrolu sa tekstom i slikom:

JLabel l = new JLabel("Hello", new ImageIcon("src/javaswing/icon.png"), JLabel.CENTER);

Putem okruženja kroz Properties prozor i svojstvo icon takođe možemo postaviti sliku na JLabel:




Okruženje će kreirati padajući meni sa opcijama slika koje trenutno postoje unutar Resources foldera aplikacije.




Ukoliko hoćete da unesemo sliku koja se nalazi izvan konteksta aplikacije, aktiviramo selektor svojstva i icon prozor:




Unutar ovog prozora možemo pregledati slike koje se nalaze u okviru projekta (Image Within Project) ili uključiti u projekat neku sliku izvan projekta.



JButton

Taster je multifunkcionalna kontrola koju korisnik najčešće koristi da bi izazvao neku akciju. JButton je zapravo samo jedan taster iz porodice AbstractButton. Ovu apstraktnu klasu takođe nasljeđuju i klase JCheckBox, JMenuItem i JRadioButton. Za JButton važe ista pravila kao i za JLabel. Prilikom instanciranja moguće je unijeti tekst tastera, a takođe je moguće unijeti i HTML kod unutar teksta tastera kao IconImage objekat. Tekst svojstvo tastera postavlja se metodom setText(), a preuzima metodom getText(). JButton kreiramo prevlačimo sa palete panela na odgovarajuću poziciju panela aplikacije:







Tasteri mogu imati enabled i disabled svojstva. Ukoliko svojstvo tastera postavimo na disabled, on će biti vidljiv, ali neće biti operativan. Na primjer, ako na dva tastera postavimo svojstvo enabled na false (a na treći ne):



U vašu Main klasu dodajte sljedeći kod:

public class Main{

    public static void main(String[] args) {
        MyForm form = new MyForm();
        form.setVisible(true);
    }   
}

Prikaz tastera će izgledaće ovako:





Događaji tastera

Da bi taster reagovao na događaj, potrebno je da mu dodeljimo odgovarajući slušač događaja. Za taster taj slušač je ActionListener:



Nakon kreiranja Events-a program vas vodi u Source i prikazuje upravo kreirani Events. Pogledajmo sljedeću sliku:



Sada dodajte sljedeći kod unutar metode jButton4ActionPerformed.

JOptionPane.showMessageDialog(null, evt.getActionCommand());

Prikaz koda iz gornjeg primjera izgledaće ovako:



Prilikom aktivacije klik događaja taster šalje sopstveni objekat slušaču, a takođe može poslati i naredbu akcije (ActionCommand). Ovu naredbu eksplicitno moramo naglasiti unutar definicije tastera, metodom setActionCommand():

btn.setActionCommand("myCommand");

Naredba se takođe prosljeđuje slušaču i dostupna je kroz metod događaja getActionCommand(). Njenom upotrebom omogućavamo priključivanje jednog slušača na više kontrola, kao u sljedećem primeru. Kreirajmo još jedno dugme i povežimo ga sa njegovim slušačem u našem slučaju to je jButton4ActionPerformed.





Dodajte sljedeći kod u jButton4ActionPerformed kao što je prikazano u sljedećem kodu:

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if(evt.getActionCommand().equals("Dugme 1")){
        JOptionPane.showMessageDialog(null, "Volim uciti Javu uz IT TUTORIJALE!");
    }
    else if(evt.getActionCommand().equals("Dugme 2")){
        JOptionPane.showMessageDialog(null, "Svaki dan ucim o Javi uz IT TUTORIJALE!");
    }
}   

Prikaz koda iz gornjeg primjera izgledaće ovako:





Zadatak za vježbu

Potrebno je kreirati klasu ButtonsAdd koja sadrži statički metod addPair(). Ovaj metod kao parametre prihvata Hashtable tip (u kome se kao ključevi nalaze web adrese, a kao vrijednosti nazivi tih adresa) i JFrame tip. Na osnovu podataka iz Hashtable tipa klasa generiše JTextField kontrole i JButton kontrole i smješta ih na prosljeđeni JFrame objekat.



Rješenje zadataka!

ButtonsAdd.java

package javaapplication11;

import java.util.Enumeration;
import java.util.Hashtable;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class ButtonsAdd
{
public static void addPair(Hashtable<String,String> values, JFrame f)
{
    Enumeration e = values.keys();
    while(e.hasMoreElements())
    {
        Object key = e.nextElement();
        
        JButton btn = new JButton(values.get(key));
        JTextField tf = new JTextField(key.toString());
        
        f.getContentPane().add(tf);
        f.getContentPane().add(btn);
        }
    }
}

Main.java

package javaapplication11;

import java.awt.FlowLayout;
import java.util.Hashtable;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;


public class Main
    {
    public static void main(String[] args)
    {
        JFrame f = new JFrame();
        f.setLayout(new FlowLayout()); //f.setLayout(new GridLayout(3, 2));
        f.setSize(200, 200);
        
        Hashtable<String, String> values = new Hashtable<>();
        values.put("www.yahoo.com", "Yahoo");
        values.put("www.bing.com", "Bing");
        values.put("www.google.com", "Google");
        
        ButtonsAdd.addPair(values, f);
        
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}