© 2013 All rights reserved.
4

Java a základy GUI #3

V minulém článku jsme si trochu rozšířili vědomosti o základních grafických ovládacích prvcích a nakonec jsme začali základy obsluhy událostí. V tomto navazujícím článku se zaměříme trochu podrobněji na události a ukážeme si jak můžeme volat více tlačítky různé metody a třídy.

V minulém článku jsme začali události a ukázali jsme si jak vytvořit událost pro jedno tlačítko. To je sice pěkné, ale pro složitější věcí nepoužitelné, protože jsme byli omezeni pouze na jednu událost definovanou v metodě actionPerformed.

V tomto článku si ukážeme Interface ActionListener, pomocí něhož můžeme vytvořit samostatnou událost pro více různých ovládacích prvků.

addActionListener

Velice jednoduchá je metoda addActionListener, která potřebuje implementaci ActionListener a její metody actionPerformed.

Možná to zní složitě, ale je to velice jednoduché.

Zjednodušeně by jsem to mohl napsat takto: vtvoříme si třídu a do ní implementujeme ActionLister, abychom mohli používat addActionListener. Pomocí AddActionListener si potom můžeme přiřadit událost pro jakýkoli objekt.

Pokud vám to stále není jasné, vyzkoušejte si následující příklad:

V příkladu jsme si vytvořili jednoduché okno s jediným tlačítkem Run typu JButton. K tomuto tlačítku jsme přidali pomocí addActionListener událost, která je přímo u něj definována jako vnitřní metodu.

Po kliknutí na toto tlačítko se vytvoří JOptionPane a vytvoří novou INFORMATION_MESSAGE.

Pomocí addActionLister můžeme však bez problémů volat i metody, které jsou již hotové a které jsou ve stejné, nebo popřípadě jiné třídě.

Vyzkoušejme si to.

Nejprve si vytvoříme dvě tlačítka a přidáme k nim události.

V prvním tlačítku voláme metodu print, a po kliknutí na druhé tlačítko voláme metodu about.
Nyní si vytvoříme tyto dvě metody:

Je vidět že jako událost můžeme nastavit prakticky cokoli co potřebujeme a to velmi jednoduše.

Pro někoho může být tento článek možná trochu zmatený, ale pokud si příklady několikrát přečtete, tak zjistíte že je to vlastně velice jednoduché.

Jako úkol si můžete například vytvořit okno, v němž bude několik tlačítek, po kliknutí na každé z nich se zavolá jiná metoda, která změní pozadí celého Containeru.

Nápověda: Container si vytvořte jako globální proměnnou, aby jste k ní mohli v ostatních metodách přistupovat. Pozadí potom změníte jednoduše pomocí setBackground.

Své hotové řešení můžete umístit například do komentářů.

V příštím článku se podíváme jak snadno vytvořit menu v naší aplikaci.

 

Mohlo by vás zajímat:

Java a základy GUI#1
Java a základy GUI#2
Java a základy GUI#4

Comments are closed for this page

Tak jsem zkusil vámi zadaný "program" a narazil jsem na chybu… GUI teprv začínam, takže zkušeností mam vážně málo, takže prosím jakéhokoliv profíka o pomoc… Tady je můj kód:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class moje extends JFrame implements ActionListener
{
public Container cont;
public moje()
{
super("Window title");
setSize(500,100);
Dimension obrazovka = Toolkit.getDefaultToolkit().getScre enSize();
setLocation(obrazovka.width/5*2, obrazovka.height/5*2);
setDefaultCloseOperation(JFrame.EXI T_ON_CLOSE);
setVisible(true);
Container cont = new Container();
cont = getContentPane();
FlowLayout layout = new FlowLayout();
cont.setLayout(layout);
cont.setBackground(Color.white);

JButton order = new JButton("proveď");
cont.add(order);
order.addActionListener(this);

setContentPane(cont);
}

public void actionPerformed(ActionEvent evt)
{
cont.setBackground(Color.BLUE);
}
}

Chyba je v tomto radku:
Container cont = new Container();
Protoz e mas nadefinovanou globalni promennou, kterou vlastne nepouzijes. Nahrad tento radek pouze timto:
cont = new Container();
Pricem z se pouzije public promenna cont.

Paráda=) Díky moc, sám bych na to nepřišel…

P.S. V seriálech jen tak dál. Prolez už jsem něco webů a tutorialů, ale u vás jsem si toho odnes nejvíc. Díky

package ukol;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Main extends JFrame implements ActionListener{
Container c;
public void cerna(){
c=getContentPane();
c.setBackground(Color.BLACK);
setSize(500,500);
FlowLayout ok=new FlowLayout();
c.setLayout(ok);

}
public void bila(){
c=getContentPane();
c.setBackground(Color.WHITE);
setSize(100,100);
FlowLayout ok=new FlowLayout();
c.setLayout(ok);

}

public Main(){
setTitle("Bez nadpisu");
c=getContentPane();
setSize(300,300);
FlowLayout ok=new FlowLayout();
c.setLayout(ok);
JButton jedna=new JButton("Cerna a velke");
c.add(jedna);
jedna.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent ev){
cerna();
}
}
);
JButton dva=new JButton("Bila a male");
c.add(dva);
dva.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent evou){
bila();
}
}
);

setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}

public static void main(String[] args) {
Main m=new Main();m.setVisible(true);
}
public void actionPerformed(ActionEvent e){}
}

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836