Pentru a trata evenimentele ce apar intr-o aplicatie trebuie respectati pasii:
Implementarea unei clase derivata dintr-o clasa Listener:
Inregistrarea unei instante a clasei precedente pe post de listner pentru o componenta derivata din JComponent:
Tratarea evenimentul de apasare pe un buton se va efectua utiliza clasa ActionListener:
class ListenerPtButon implements ActionListener {
private int numClicks = 0;
public void actionPerformed(ActionEvent e){
numClicks++;
((JButton)e.getSource()).setText(“Apasat: “ + numClicks);
}
}
JButton butonulMeu = new JButton(“Apasa: 0”);
butonulMeu. addActionListener(new ListenerPtButon());
oComponenta.addActionListener(instanceOfMyClass);
public class MyClass implements xxxListener {
public void eveniment(xxxEvent e) {
...//tratarea evenimentului... }
}
//fisier START.java
public class START { public static void main(String[] args) { Desen_aplicatie.Main(); } }import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;class Butoane extends JPanel { JButton b1; JButton b2; public Butoane(){ b1=new JButton("ButonA"); b2=new JButton("ButonB"); this.setLayout(new GridLayout(1,0)); add(b1); add(b2); } }
class Butoane2 extends JPanel { //JButton b1; public Butoane2(){ JButton b1=new JButton(new ImageIcon("Butoane/buton2.png")); this.setLayout(new GridLayout(1,0)); add(b1); } }
class CheckBoxuri extends JPanel{ JCheckBox cb1; JCheckBox cb2; JCheckBox cb3;
public CheckBoxuri(){ cb1=new JCheckBox("Optiune1"); cb1.setSelected(true); cb2=new JCheckBox("Optiune2"); cb2.setSelected(true); cb3=new JCheckBox("Optiune3"); cb3.setSelected(true); this.setLayout(new GridLayout(0,1)); add(cb1); add(cb2); add(cb3); }}
class CheckBoxuri2 extends JPanel{
JCheckBox cb1; JCheckBox cb2; JCheckBox cb3;
public CheckBoxuri2(){ cb1=new JCheckBox("Optiune4"); cb1.setSelected(true); cb2=new JCheckBox("Optiune5"); cb2.setSelected(true); cb3=new JCheckBox("Optiune6"); cb3.setSelected(true); this.setLayout(new GridLayout(0,1)); add(cb1); add(cb2); add(cb3); }}
class ButoaneRadio extends JPanel{ JRadioButton buttonAlb; JRadioButton buttonRosu; JRadioButton buttonVerde; public ButoaneRadio(){ buttonAlb=new JRadioButton("Alb"); buttonAlb.setSelected(true); buttonRosu=new JRadioButton("Rosu"); buttonRosu.setSelected(true); buttonVerde=new JRadioButton("Verde"); buttonVerde.setSelected(true); ButtonGroup group =new ButtonGroup();
group.add(buttonAlb); group.add(buttonRosu); group.add(buttonVerde); this.setLayout(new GridLayout(0,1)); add(buttonAlb); add(buttonRosu); add(buttonVerde); }}
class Tabel extends JPanel{ public Tabel(){ String[] columns={"Nr crt","Nume student","N1","N2","N3","N4","N5","N6" }; Object[][] data={ { "1","Popescu Ion",10.00, 10.00, 10.00, 10.00, 10.00, 10.00}, { "1","Popescu Ion",8, 7, 6, 7, 7, 8} }; JTable table= new JTable(data,columns); JScrollPane scrollPane=new JScrollPane(table); table.setFillsViewportHeight(true); JLabel lblHeading=new JLabel("Eticheta"); lblHeading.setFont(new Font("Arial",Font.TRUETYPE_FONT,24)); add(lblHeading,BorderLayout.PAGE_START); add(scrollPane,BorderLayout.CENTER); }
}
public class Desen_aplicatie extends JFrame{ public static void Main(){ Desen_aplicatie app=new Desen_aplicatie(); Butoane panouButoane=new Butoane();// Tabel addTabel=new Tabel(); CheckBoxuri panouCheckboxuri=new CheckBoxuri(); ButoaneRadio panouButoaneRadio=new ButoaneRadio(); CheckBoxuri2 panouCheckboxuri2=new CheckBoxuri2(); Butoane2 panouButoane2=new Butoane2();// panouButoane.b1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ if(panouCheckboxuri.cb1.isSelected()){ panouCheckboxuri.cb1.setSelected(false); } else{ panouCheckboxuri.cb1.setSelected(true); } if(panouCheckboxuri.cb2.isSelected()){ panouCheckboxuri.cb2.setSelected(false); } else{ panouCheckboxuri.cb2.setSelected(true); } if(panouCheckboxuri.cb3.isSelected()){ panouCheckboxuri.cb3.setSelected(false); } else{ panouCheckboxuri.cb3.setSelected(true); } } }); panouButoane.b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){ if(panouButoaneRadio.buttonAlb.isSelected()){ panouButoaneRadio.buttonRosu.setSelected(true); } else if(panouButoaneRadio.buttonRosu.isSelected()){panouButoaneRadio.buttonVerde.setSelected(true); } else if(panouButoaneRadio.buttonVerde.isSelected()){ panouButoaneRadio.buttonAlb.setSelected(true); } } });
panouButoane2.b1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ String str="Optiunile selectate: "; if(panouCheckboxuri2.cb1.isSelected()){ str=str+ panouCheckboxuri2.cb1.getText()+" "; } if(panouCheckboxuri2.cb2.isSelected()){ str=str+ panouCheckboxuri2.cb2.getText()+" "; } if(panouCheckboxuri2.cb3.isSelected()){ str=str+ panouCheckboxuri2.cb3.getText()+" "; } JOptionPane.showMessageDialog(null, str, "", JOptionPane.INFORMATION_MESSAGE); } }); JPanel panou=new JPanel(); panou.add(addTabel); panou.add(panouButoane); panou.add(panouCheckboxuri); panou.add(panouButoaneRadio); panou.add(panouCheckboxuri2); panou.add(panouButoane2); panou.setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); app.getContentPane().add(panou);
app.setTitle("Aplicatie compleaza"); app.setSize(1000,600); app.setVisible(true); }}
Exemplu 2
import javax.swing.*;
public class absolt_c2 extends JFrame{ public absolt_c2() { init(); }
private void init() { setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel=new JPanel (null); JTextField textField=new JTextField(60); textField.setBounds(50,50,100,50); JTextField textField2=new JTextField(60); textField2.setBounds(160,50,100,50); JTextField textField3=new JTextField(60); textField3.setBounds(270,50,100,50); JButton button=new JButton("Buton1"); button.setBounds(50,100,100,50); JButton button2=new JButton("Buton2"); button2.setBounds(160,100,100,50);
JButton button3=new JButton("Buton2"); button3.setBounds(270,100,100,50);
JCheckBox checkBox=new JCheckBox("check!"); checkBox.setBounds(50,250,100,100); // aici se adauga elementele pe panel panel.add(textField); panel.add(textField2); panel.add(textField3); panel.add(button); panel.add(button2); panel.add(button3);
panel.add(checkBox);
setContentPane(panel); } public static void main(String[] args) { new absolt_c2().setVisible(true); }}
JOptionPane contine urmatoarele metode după cum urmează:
showMessageDialog () care este folosit pentru a afişa un mesaj simplu.
showInputDialog () care este folosita pentru a afişa un prompt. Această metodă returnează o valoare şir care este scris de utilizator.
showConfirmDialog () care solicită ghidul de confirmare (Yes/ No), prin afişarea mesajului. Această metodă returnează o valoare numerică fie 0 sau 1. Dacă faceţi clic pe butonul "Yes", apoi metoda returneaza 1 altfel 0
Exemplu 3import java.awt.*;import javax.swing.*;import java.awt.event.*;
public class Dialog_d2 { public static void main(String[] args){ JFrame frame = new JFrame("Input Dialog Box Frame"); JButton button = new JButton("Show Input Dialog Box");
button.setBounds(20,100,170,50); JButton button2 = new JButton("Show Input Dialog Box2"); button2.setBounds(210,100,170,50); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) {String str = JOptionPane.showInputDialog(null, "Enter some text: ","diverse",1); if (str != null) JOptionPane.showMessageDialog(null, "You entered the text: " + str,"diverse",1); else JOptionPane.showMessageDialog(null, "You pressed cancel button","diverse",1); } }); button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) { String str = JOptionPane.showInputDialog(null, "Introduceti primul text: ","diverse",1); String str2 = JOptionPane.showInputDialog(null, "Introduceti al 2lea text: ","diverse2",1); if ((str != null)&&(str2 != null)) JOptionPane.showMessageDialog(null, "You entered the text: " + str + " - " + str2,"diverse",1); else JOptionPane.showMessageDialog(null, "You pressed cancel button","diverse",1); } });
JPanel panel = new JPanel(null);
panel.add(button); panel.add(button2); frame.add(panel); frame.setSize(400,200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); frame.setTitle("Exemplu meu"); }
}
Construirea unei fereastra principale a aplicaţiilor tip desktop cu meniuri SwingDe regulă, ferestrele principale ale aplicaţiilor desktop reprezintă calea esenţială pentru accesul la funcţiile principale ale aplicaţiei. De regulă acest lucru realizat printr-un meniu însoţit, eventual, şi de o bară de instrumente.
Majoritatea obiectelor grafice sunt subclase ale clasei Component,
clasa care defineşte generic o componentă grafică şi care poate
interacţiona cu utilizatorul. Singura excepţie o constituie meniurile care
descind din clasa MenuComponent.
Toate componentele Swing sunt reprezentate de clase si definite în
pachetul javax.swing. Următorul tabel arata numele claselor pentru
componentele Swing (inclusiv cele folosite ca si container).
JApplet JButton JCheckBox JCheckBoxMenuItem
JColorChoose
r
JComboBox JComponent JDesktopPane
JDialog JEditorPane JFileChooser JFormattedTextField
JFrame JInternalFram
e
JLabel JLayer
JLayeredPane JList JMenu JMenuBar
JMenuItem JOPtionPane JPanel JPasswordField
JPopupMenu JProgressBar JRadioButto
n
JRadioButtonMenuIte
m
JRootPane JScroolBar JScroolPane JSeparator
JSlider JSpinner JSplitPane JTabbedPane
JTable JTextArea JTextField JTextPane
JTogglebutton JToolBar JToolTip JTree
JViewport JWindow
Crearea meniurilor
Modelul orientat obiect al meniurilor în Swing are următoarele caracteristici:
- bară principală reprezintă o instanţă a clasei JMenuBar, sau, pentru meniurile contextuale, JPopUpMenu;
- meniurile accesebile din bara principală sunt obţinute din clasa JMenu;
- elementele individuale ale unui menu (instanţă JMenu) sunt construite pe baza clasei JMenuItem care are următoarele subclase: JCheckBoxMenuItem, JRadioButtonMenuItem şi JMenu. Prin urmare un element individual dintr-un meniu poate fi, la rândul său, un al submenu (instanţă JMenu);
Ca urmare definiţia celui mai simplu meniu ar putea fi următoarea:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MainMenuBar extends JMenuBar{
JFrame frmParent;
public MainMenuBar() {
JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
JMenu quitMenu = new JMenu("Quit");
// Meniul File: Open, Save, Close
JMenuItem openItem = new JMenuItem("Open");
JMenuItem saveItem = new JMenuItem("Save");
JMenuItem closeItem = new JMenuItem("Close");
//Meniul Edit: Cut, Copy, Paste, Find (Find, Replace)
JMenuItem cutItem = new JMenuItem("Cut");
JMenuItem copyItem = new JMenuItem("Copy");
JMenuItem pasteItem = new JMenuItem("Paste");
JSeparator separator1 = new JSeparator();
JMenu findMenu = new JMenu("Find");
JMenuItem findItem = new JMenuItem("Find");
JMenuItem replaceItem = new JMenuItem("Replace");
//Meniul Quit
JMenuItem exitItem = new JMenuItem("Exit");
JMenuItem aboutItem = new JMenuItem("About");
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
editMenu.add(cutItem);
editMenu.add(copyItem);
editMenu.add(pasteItem);
editMenu.add(separator1);
findMenu.add(findItem);
findMenu.add(replaceItem);
editMenu.add(findMenu);
editMenu.add(new JCheckBox("Bifa"));
quitMenu.add(exitItem);
quitMenu.add(aboutItem);
add(fileMenu);
add(editMenu);
add(quitMenu);
}
}
Pentru a dispune un meniu într-un formular, avem nevoie de o instanţă JFrame pentru bara de meniu, stabilită prin metoda setJMenuBar(). De exemplu clasa principala este:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class FormMain extends JFrame{
public FormMain() {
this.setJMenuBar(new MainMenuBar());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 500);
this.setVisible(true);
}
public static void main(String[] args) {
new FormMain();
}
}
va avea la runtime următorul rezultat:
Varianta 2
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class MainMenuBar_1 extends JMenuBar{
JFrame frmParent;
public MainMenuBar_1() {
JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
JMenu quitMenu = new JMenu("Quit");
// Meniul File: Open, Save, Close
JMenuItem openItem = new JMenuItem("Open");
JMenuItem saveItem = new JMenuItem("Save");
JMenuItem closeItem = new JMenuItem("Close");
//Meniul Edit: Cut, Copy, Paste, Find (Find, Replace)
JMenuItem cutItem = new JMenuItem("Cut");
JMenuItem copyItem = new JMenuItem("Copy");
JMenuItem pasteItem = new JMenuItem("Paste");
JSeparator separator1 = new JSeparator();
JMenu findMenu = new JMenu("Find");
JMenuItem findItem = new JMenuItem("Find");
JMenuItem replaceItem = new JMenuItem("Replace");
//Meniul Quit
JMenuItem exitItem = new JMenuItem("Exit");
JMenuItem aboutItem = new JMenuItem("About");
//se adauga Item la un JMenu
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
editMenu.add(cutItem);
editMenu.add(copyItem);
editMenu.add(pasteItem);
editMenu.add(separator1);
findMenu.add(findItem);
findMenu.add(replaceItem);
editMenu.add(findMenu);
editMenu.add(new JCheckBox("Bifa"));
quitMenu.add(exitItem);
quitMenu.add(aboutItem);
//se adauga JMenu la interfata
add(fileMenu);
add(editMenu);
add(quitMenu);
} }
public class Meniuri extends JFrame{
public Meniuri() {
this.setJMenuBar(new MainMenuBar_1());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 500);
this.setVisible(true);
}
public static void main(String[] args) {
new Meniuri();
} }
O parte din clasele pentru evenimetele Java
Evenimentele generate de componente sunt preluate şi tratate de obiecte specifice care trebuie să se conformeze anumitor interfeţe. În Java sunt definite interfeţe pentru fiecare categorie de evenimente, iar obiectele “co-interesate” în tratarea lor trebuie, prin urmare, să implementeze aceste interfeţe, adică sunt obligate să deţină metodele care vor fi apelate la apariţia respectivelor evenimente.
Interfaţa EventListener si extensiile sale
putem deduce că:
- un obiect sursă de evenimente (o componentă) are nevoie de un obiect care să îi recepţioneze şi să-i trateze evenimentele, obiect desemnat printr-o metodă specifică cum ar fi addActionListener pentru evenimente din categoria ActionEvent, sau alte metode specifice (AddAncestorListener(AncestorListener), addComponentListener(ComponentListener), addFocusListener(FocusListener), addItemListener(ItemListener), addKeyListener(KeyListener), addMouseListener(MouseListener)) pentru alte tipuri de evenimente;
- obiectul receptor trebuie să implementeze o interfaţă specifică cum ar fi ActionListener specifică obiectelor pe care le poate recepţiona – ActionEvent, instanţă care presupune implementarea unei metode care va fi de fapt apelată la producerea respectivului eveniment – actionPerformed.
Modul în care colaborează obiectele implicate în exemplul de mai sus poate fi redat astfel:
Colaborare bazată pe evenimente
Am menţionat, la un moment dat, că închiderea frame-urilor afişate nu implică automat şi încheirea execuţiei procesului respectiv. Încheirea execuţiei unui process se poate realiza prin invocarea metodei System.exit(). Când însă ar trebui executată această metodă ? Răspunsul logic ar fi la închiderea ferestrei.. Evenimentele specifice ferestrelor vor fi preluate de obiecte ce corespund interfeţei WindowListener.
Această interfaţă este ceva mai complicată decât ActionListener pentru că presupune mai multe metode:
public void windowActivated(WindowEvent event)Invocată atunci când fereastra respectivă va prelua controlul şi va recepţiona acţiunile utilizatorului de la tastatură.
public void windowClosing(WindowEvent event)Invocată atunci când utilizatorul încearcă în mod explicit închiderea ferestrei.
public void windowClosed(WindowEvent event)Invocată în momentul în care fereastra a fost închisă.
public void windowDeactivated(WindowEvent event)Invocată atunci când fereastra nu mai este fereastra activă, adică nu va mai recepţiona evenimentele determinate de acţiunile de la tastatură.
public void windowIconified(WindowEvent event)Invocată atunci când fereastra este minimizată.
public void windowDeiconified(WindowEvent event)Invocată atunci când fereastra este restaurată la forma normală.
public void windowOpened(WindowEvent event)Invocată prima dată când fereastra devine vizibilă.
Prin urmare dacă JFrame-ul Intermitent îşi va înregistra prin metoda addWindowListener(WindowListener) un obiect care va recepţiona evenimentele specifice ferestrelor şi care va fi obligat astfel să respecte interfaţa WindowListener, atunci instrucţiunea cu pricina ar trebui specificată în metoda windowClosing(WindowEvent). Programul iniţial modificându-se astfel:
http://docs.oracle.com/javase/7/docs/api/java/awt/event/WindowAdapter.html
Class WindowAdapter
java.lang.Object o java.awt.event.WindowAdapter
All Implemented Interfaces:WindowFocusListener, WindowListener, WindowStateListener, EventListener
Direct Known Subclasses:
BasicToolBarUI.FrameListener, JMenu.WinListener
public abstract class WindowAdapterextends Objectimplements WindowListener, WindowStateListener, WindowFocusListener
An abstract adapter class for receiving window events. The methods in this class are
empty. This class exists as convenience for creating listener objects.
Extend this class to create a WindowEvent listener and override the methods for the events of interest. (If you implement the WindowListener interface, you have to define all of the methods in it. This abstract class defines null methods for them all, so you can only have to define methods for events you care about.)
Create a listener object using the extended class and then register it with a Window using the window's addWindowListener method. When the window's status changes by virtue of being opened, closed, activated or deactivated, iconified or deiconified, the relevant method in the listener object is invoked, and the WindowEvent is passed to it.
WindowEvent, WindowListener, Tutorial: Writing a Window Listener
o Constructor Summary
Constructors
Constructor and Description
WindowAdapter()
o Method Summary
Methods
Modifier and Type
Method and Description
voidwindowActivated(WindowEvent e)
Invoked when a window is activated.
voidwindowClosed(WindowEvent e)
Invoked when a window has been closed.
voidwindowClosing(WindowEvent e)
Invoked when a window is in the process of being closed.
voidwindowDeactivated(WindowEvent e)
Invoked when a window is de-activated.
voidwindowDeiconified(WindowEvent e)
Invoked when a window is de-iconified.
void
windowGainedFocus(WindowEvent e)
Invoked when the Window is set to be the focused Window, which means that the Window, or one of its subcomponents, will receive keyboard events.
voidwindowIconified(WindowEvent e)
Invoked when a window is iconified.
void
windowLostFocus(WindowEvent e)
Invoked when the Window is no longer the focused Window, which means that keyboard events will no longer be delivered to the Window or any of its subcomponents.
voidwindowOpened(WindowEvent e)
Invoked when a window has been opened.
void windowStateChanged(WindowEvent e)
Invoked when a window state is changed.
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
o Constructor Detail
WindowAdapter
public WindowAdapter()
o Method Detail
windowOpened
public void windowOpened(WindowEvent e)
Invoked when a window has been opened.
Specified by:
windowOpened in interface WindowListener
windowClosing
public void windowClosing(WindowEvent e)
Invoked when a window is in the process of being closed. The close operation can be overridden at this point.
Specified by:
windowClosing in interface WindowListener
windowClosed
public void windowClosed(WindowEvent e)
Invoked when a window has been closed.
Specified by:
windowClosed in interface WindowListener
windowIconified
public void windowIconified(WindowEvent e)
Invoked when a window is iconified.
Specified by:
windowIconified in interface WindowListener
See Also:
Frame.setIconImage(java.awt.Image)
windowDeiconified
public void windowDeiconified(WindowEvent e)
Invoked when a window is de-iconified.
Specified by:
windowDeiconified in interface WindowListener
windowActivated
public void windowActivated(WindowEvent e)
Invoked when a window is activated.
Specified by:
windowActivated in interface WindowListener
windowDeactivated
public void windowDeactivated(WindowEvent e)
Invoked when a window is de-activated.
Specified by:
windowDeactivated in interface WindowListener
windowStateChanged
public void windowStateChanged(WindowEvent e)
Invoked when a window state is changed.
Specified by:
windowStateChanged in interface WindowStateListener
windowGainedFocus
public void windowGainedFocus(WindowEvent e)
Invoked when the Window is set to be the focused Window, which means that the Window, or one of its subcomponents, will receive keyboard events.
Specified by:
windowGainedFocus in interface WindowFocusListener
windowLostFocus
public void windowLostFocus(WindowEvent e)
Invoked when the Window is no longer the focused Window, which means that keyboard events will no longer be delivered to the Window or any of its subcomponents.
Specified by: windowLostFocus in interface WindowFocusListener