Ancora sugli Eventi - PowerPoint PPT Presentation

1 / 37
About This Presentation
Title:

Ancora sugli Eventi

Description:

Create and set up the window. JFrame frame = new JFrame('MultiListener' ... caret. change. document. undoable edit. item. list. selection. window ... – PowerPoint PPT presentation

Number of Views:38
Avg rating:3.0/5.0
Slides: 38
Provided by: latemarSc
Category:
Tags: ancora | caret | eventi | sugli

less

Transcript and Presenter's Notes

Title: Ancora sugli Eventi


1
Ancora sugli Eventi
  • Gestione
  • degli
  • eventi

2
Modello 1.1

3
multiListenerDemo
  • package listenersdemo
  • import javax.swing. import java.awt.
    import java.awt.event.
  • public class MultiListener
  • extends JPanel implements ActionListener
  • JTextArea topTextArea
  • JTextArea bottomTextArea
  • JButton button1, button2
  • JLabel l null
  • final static String newline "\n"
  • public static void main(String args)
  • createAndShowGUI()

4
multiListenerDemo
  • private static void createAndShowGUI()
  • //Create and set up the window.
  • JFrame frame new JFrame("MultiListener")
  • frame.setDefaultCloseOperation(JFrame.EXIT_ON_
    CLOSE)
  • //Create and set up the content pane.
  • JComponent newContentPane new
    MultiListener()
  • frame.setContentPane(newContentPane)
  • //Display the window.
  • frame.pack()
  • frame.setVisible(true)

5
multiListenerDemo
  • public MultiListener()
  • super(new FlowLayout())
  • l new JLabel("Cosa sento io")
  • add(l)
  • topTextArea new JTextArea()
  • topTextArea.setEditable(false)
  • JScrollPane topScrollPane new
    JScrollPane(topTextArea)
  • Dimension preferredSize new Dimension(200,
    75)
  • topScrollPane.setPreferredSize(preferredSize)
  • add(topScrollPane)
  • l new JLabel("Cosa sente la spia")
  • add(l)
  • bottomTextArea new JTextArea()
  • bottomTextArea.setEditable(false)

6
multiListenerDemo
  • JScrollPane bottomScrollPane new
    JScrollPane(bottomTextArea)
  • bottomScrollPane.setPreferredSize(preferredSiz
    e)
  • add(bottomScrollPane)
  • button1 new JButton("Fra Martino
    campanaro")
  • add(button1)
  • button2 new JButton("Dormi tu?")
  • add(button2)
  • button1.addActionListener(this)
  • button2.addActionListener(this)
  • button2.addActionListener(new
    Spia(bottomTextArea))
  • setPreferredSize(new Dimension(400, 300))
  • public void actionPerformed(ActionEvent e)
  • topTextArea.append(e.getActionCommand()
    newline)
  • topTextArea.setCaretPosition(topTextArea.getDo
    cument().getLength())

7
multiListenerDemo
  • class Spia
  • implements ActionListener
  • JTextArea myTextArea
  • public Spia(JTextArea ta)
  • myTextArea ta
  • public void actionPerformed(ActionEvent e)
  • myTextArea.append(e.getActionCommand()
  • MultiListener.newline)
  • myTextArea.setCaretPosition(myTextArea.getDocu
    ment().getLength())

8
Design considerations
  • The most important rule to keep in mind about
    event listeners that they should execute very
    quickly. Because all drawing and event-listening
    methods are executed in the same thread, a slow
    event-listener method can make the program seem
    unresponsive and slow to repaint itself.
  • You might choose to implement separate classes
    for different kinds of event listeners. This can
    be an easy architecture to maintain, but many
    classes can also mean reduced performance.
  • When designing your program, you might want to
    implement your event listeners in a class that is
    not public, but somewhere more hidden. A private
    implementation is a more secure implementation.

9
Low-Level Events and Semantic Events
  • Events can be divided into two groups low-level
    events and semantic events. Low-level events
    represent window-system occurrences or low-level
    input. Everything else is a semantic event.
  • Examples of low-level events include mouse and
    key events both of which result directly from
    user input.
  • Examples of semantic events include action and
    item events.
  • Whenever possible, you should listen for semantic
    events rather than low-level events. That way,
    you can make your code as robust and portable as
    possible. For example, listening for action
    events on buttons, rather than mouse events,
    means that the button will react appropriately
    when the user tries to activate the button using
    a keyboard alternative or a look-and-feel-specific
    gesture.

10
Listeners/Adapters
  • public class MyClass implements MouseListener
  • ...
  • someObject.addMouseListener(this)
  • ...
  • / Empty method definition. /
  • public void mousePressed(MouseEvent e)
  • / Empty method definition. /
  • public void mouseReleased(MouseEvent e)
  • / Empty method definition. /
  • public void mouseEntered(MouseEvent e)
  • / Empty method definition. /
  • public void mouseExited(MouseEvent e)
  • public void mouseClicked(MouseEvent e)
    ...//Event listener implementation goes here...

11
Listeners/Adapters
  • / An example of extending an adapter class
    instead of directly implementing a listener
    interface. /
  • public class MyClass extends MouseAdapter
  • ...
  • someObject.addMouseListener(this)
  • ...
  • public void mouseClicked(MouseEvent e)
  • //Event listener implementation goes
    here
  • ...

12
Inner classes
  • //An example of using an inner class.
  • public class MyClass extends JFrame
  • ...
  • someObject.addMouseListener(
  • new MyAdapter())
  • ...
  • class MyAdapter extends MouseAdapter
  • public void mouseClicked(MouseEvent e)
  • ...//Event listener implementation goes
    here...

13
Anonymous Inner classes
  • //An example of using an inner class.
  • public class MyClass extends JFrame
  • ...
  • someObject.addMouseListener(
  • new MouseAdapter ()
  • public void mouseClicked(MouseEvent
    e)
  • ...//Event listener implementation
    goes here...
  • )

14
Inner classes
  • An instance of InnerClass can exist only within
    an instance of EnclosingClass and it has direct
    access to the instance variables and methods of
    its enclosing instance.

15
Anonymous Inner classes
  • //An example of using an inner class.
  • public class MyClass extends JFrame
  • ...
  • someObject.addMouseListener(
  • new MouseAdapter()
  • public void mouseClicked(MouseEvent e)
  • ...//Event listener implementation goes
    here...
  • )
  • ...

16
Listeners supported by all Swing components
  • component listener
  • Listens for changes in the component's size,
    position, or visibility.
  • focus listener
  • Listens for whether the component gained or lost
    the ability to receive keyboard input.
  • key listener
  • Listens for key presses key events are fired
    only by the component that has the current
    keyboard focus.
  • mouse listener
  • Listens for mouse clicks and mouse movement into
    or out of the component's drawing area.
  • mouse-motion listener
  • Listens for changes in the cursor's position over
    the component.
  • mouse-wheel listener (introduced in 1.4)
  • Listens for mouse wheel movement over the
    component.

17
Altri listeners
  • action
  • caret
  • change
  • documentundoable edit
  • item
  • listselection
  • window
  • Listeners speciali per componenti specifiche
    (treeNodeExpansion, ecc)

18
Fondamenti di Java
  • Introduzione alla
  • costruzione di GUI
  • Pluggable Look Feel

19
Pluggable LookFeel

20
Scelta del LookFeel
public static void main(String args) try
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName())
catch (Exception e) new
SwingApplication() //Create and show the GUI.
UIManager.getCrossPlatformLookAndFeelClassName()
Returns the Java look and feel.
UIManager.getSystemLookAndFeelClassName()
Specifies the look and feel for the current
platform.

21
Scelta del LookFeel
public static void main(String args) try
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.gtk.GTKLookAndFeel")
catch (Exception e) new
SwingApplication() //Create and show the GUI.
UIManager.getSystemLookAndFeelClassName(String
s) Specifies the look and feel for the platform
described by s.

22
Available LookFeel
"com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
Specifies the GTK look and feel. Introduced in
release 1.4.2. "javax.swing.plaf.metal.MetalLookA
ndFeel" Specifies the Java look and feel.
"com.sun.java.swing.plaf.windows.WindowsLookAndF
eel" Specifies the Windows look and feel.
Currently, you can use this look and feel only on
Microsoft Windows systems. "com.sun.java.swing.pla
f.motif.MotifLookAndFeel" Specifies the
CDE/Motif look and feel. This look and feel can
be used on any platform.

23
Sezione Costruttori
  • Costruttori

24
Definizione dei costruttori
  • Se per una classe A non scrivo nessun
    costruttore, il sistema automaticamente crea il
    costruttore A()
  • Se invece definisco almeno un costruttore non
    void, ad es. A(int s), il sistema non crea il
    costruttore A()

25
Definizione dei costruttori
  • Se B è figlia di A, il costruttore di B come
    prima cosa invoca A(), a meno che la prima
    istruzione non sia una super.

A(int k) ...
A() ...
B(int k) super(k)...
B(int k) ...
26
Invocazione dei costruttori
  • public class A
  • public A()
  • System.out.println("Creo A")
  • public class B extends A
  • public B()
  • System.out.println("Creo B")
  • public B(int k)
  • System.out.println("Creo B_int)

Output Creo A Creo B_int
public static void main(String a) B
bnew B(1)
27
Invocazione dei costruttori
  • public class A
  • public A(int k)
  • System.out.println("Creo A")
  • public class B extends A
  • public B()
  • System.out.println("Creo B")
  • public B(int k)
  • System.out.println("Creo B_int)

Output ERRORE ! Perchè ?
public static void main(String a) B
bnew B(1)
28
Sezione Modificatori
  • Abstract e Controllo di accesso

29
Modificatori abstract
  • Classi dichiarate abstract non possono essere
    istanziate, e devono essere subclassate.
  • Metodi dichiarati abstract devono essere
    sovrascritti
  • Una class non abstract non può contenere abstract
    metods

30
Modificatori visibilità
  • public visibile da tutti
  • (non def.) visibile da tutti nello stesso package
  • protected visibile dalle sottoclassi
  • private nascosta da tutti

Uso di metodi di accesso
public class ACorrectClass private String
aUsefulString public String
getAUsefulString() return
aUsefulString // "get" the value
private void setAUsefulString(String s)
//protected void setAUsefulString(String s)
aUsefulString s // "set" the value
31
Matrice degli accessi
Access Levels Access Levels Access Levels Access Levels Access Levels
Specifier Class Package Subclass World
private Y N N N
no specifier Y Y N N
protected Y Y Y N
public Y Y Y Y
Vedi anche http//java.sun.com/docs/books/tutoria
l/java/javaOO/accesscontrol.html
32
Sezione Upcast - downcast
  • Upcast downcast

33
Coercion
Una funzione può essere polimorfa senza essere
stata disegnata tale intenzionalmente. Sia f
una funzione che prende un argomento di tipo T, e
S sia un tipo che può essere automaticamente
convertito in T. Allora f può essere detta
polimorfa respetto a S e T. float somma(float x,
float y) accetta anche somma (3,
3.14) somma(2,3) (coercion di int a float)
34
cast
  • public class Test
  • public static void main(String a)
  • new Test()

Test() A a B b new B()
ab a.f1() a.f2()
OK upcast implicito
NO "method f2 not found in class A" (compiler)
class A void f1()
System.out.println("f1") class B extends A
void f2() System.out.println("f2") class
C extends B void f3() System.out.println("f3
")
35
cast
  • public class Test
  • public static void main(String a)
  • new Test()

Test() A a B b new B()
ab a.f1() ((B)a).f2()
OK upcast implicito
OK downcast corretto
class A void f1()
System.out.println("f1") class B extends A
void f2() System.out.println("f2") class
C extends B void f3() System.out.println("f3
")
36
cast
  • public class Test
  • public static void main(String a)
  • new Test()

Test() A a B b new B()
ab a.f1() ((C)a).f3()
OK upcast implicito
NO downcast illecito (runtime) java.lang.ClassCas
tException
class A void f1()
System.out.println("f1") class B extends A
void f2() System.out.println("f2") class
C extends B void f3() System.out.println("f3
")
37
Type conversion - cast
  • Si può applicare cast SOLO allinterno di una
  • gerarchia di ereditarietà
  • È consigliabile usare l'operatore instanceof per
    verificare prima effettuare un downcast
  • if (staff1 instanceof Manager)
  • Manager n (Manager)staff1
  • ...
Write a Comment
User Comments (0)
About PowerShow.com