Aplicația poate fi operată nu numai cu mouse-ul, dar și cu tastatura. Conceptul de concentrare este important aici. Pentru a gestiona evenimentele de focalizare în timp ce scrieți aplicații Java, trebuie să utilizați FocusListener. Cred că toată lumea știe ce este un truc. Cu toate acestea, aș dori să vă spun un pic despre modul în care înțeleg conceptul de focus. Focus este un fel de pointer care vă spune ce componentă este activă și poate reacționa la tastatură. Numai o componentă poate fi focalizată. Focus, de obicei afișează un dreptunghi cu o linie subțire (deși acest lucru nu este întotdeauna cazul), sau un dreptunghi punctată. Focalizarea poate fi schimbată pentru a ajunge la componenta dorită. De obicei, puteți comuta focalizarea utilizând butonul Tab. Cel mai bun exemplu de operație de focalizare este câteva câmpuri de text la care trebuie să introduceți anumite date. În același timp, nu putem intra - este evident, înseamnă că trebuie să existe ceva care să spună ce componentă este activă acum și puteți introduce datele din tastatură în ea. Un pointer indicând câmpul în care introducem în prezent date și există un accent. Focalizarea poate avea nu numai câmpuri text. Poate avea, de exemplu, butoane.
Uneori devine necesar să se efectueze o anumită acțiune atunci când se obține o focalizare de către o componentă sau invers atunci când se pierde. Acest lucru se face cu ajutorul ascultătorilor. În cazul în care componenta primește focusul, iar când acesta generează evenimentul pierdere de sistem care au nevoie pentru a urmări și de a răspunde la ea. Pentru a răspunde evenimentelor focale, există un FocusListener special pentru ascultători. Interfața are două metode focusGained - numit de către sistem în cazul în care componenta primește focusul și focusLost - numit atunci când componenta pierde focalizarea. Totul este extrem de simplu. Punerea în aplicare a unei interfețe, scrie codul corespunzător în metodele și apoi adăugați ascultător rezultat la intrarea corectă cu metoda addFocusListener.
Aplicație de testare. Este foarte simplu și conține două butoane. De îndată ce butonul "Butonul 2" primește sau pierde focalizarea și se apelează metodele corespunzătoare ale ascultătorului de focalizare, acesta este afișat imediat prin mesajul text de sub butoane.
Aspectul cererii de testare este prezentat în figura de mai jos.
Codul sursă este mai mic.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
clasa publica TestFrame extinde JFrame
privat JLabel eventLabel;
public TestFrame () super ("Cadru de testare");
JPanel mainPanel = nou JPanel ();
mainPanel.setLayout (nou BorderLayout ());
Butoanele JPanelPanel = nou JPanel ();
Butonul JButton1 = noul JButton ("butonul 1");
button1.setPreferredSize (noua dimensiune (150, 80));
butoanePanel.add (buton1);
Butonul JButton2 = noul JButton ("butonul 2");
button2.setPreferredSize (noua dimensiune (150, 80));
butoanePanel.add (buton2);
eventLabel = JLabel nou ();
eventLabel.setHorizontalAlignment (JLabel.CENTER);
mainPanel.add (eventLabel, BorderLayout.CENTER);
statică publică JLabel createEmptyLabel () JLabel label = new JLabel ();
label.setPreferredSize (noua dimensiune (100, 30));
eticheta de returnare;
>
statice void main (String [] args) publice javax.swing.SwingUtilities.invokeLater (nou Runnable () public void run () JFrame.setDefaultLookAndFeelDecorated (true);
Cadru JFrame = TestFrame nou ();
frame.setPreferredSize (noua dimensiune (330, 160));
frame.pack ();
frame.setLocationRelativeTo (null);
frame.setVisible (adevărat);
>
>);
>
clasa publica CustomListener implementeaza FocusListener
public void focusGained (FocusEvent e) eventLabel.setText ("butonul 2 - focusGained ()");
>
public void focusLost (FocusEvent e) eventLabel.setText ( "Butonul 2 - focusLost ()");
>
>
>