Fondamenti di Java. Introduzione alla costruzione di GUI (graphic user interface)

34  Download (0)

Full text

(1)

Fondamenti di Java

Introduzione alla

(2)

component - container - layout

Un Container contiene [0 o +] Components

Il Layout specifica come i Components sono disposti nel Container Un Container è un Component (quindi il contenimento è ricorsivo) Un Component ha una Graphics associata

Component

Container

posiziona Layout

Graphics

(3)

awt component hierarchy

 

Component

Button Canvas Checkbox Choice TextComponent

(4)

awt container hierarchy

  Container

Frame

Window

Dialog

FileDialog

ScrollPanel Panel

Applet

(5)

javax.swing

java.awt

Swing component hierarchy

 

Container

JComponent

Component

(6)

Top Level Containers

TUTORIAL:

http://java.sun.com/docs/books/tutorial/uiswing/

(7)

General Purpose Containers

(8)

Special Purpose Containers

(9)

Basic Controls

(10)

Uneditable Information

(11)

More complex structures

(12)

Prima applicazione

App YellowWindow

JFrame

(13)

JFrame

(14)

class YellowWindow

package it.unitn.science.prog2.guiApp;

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

public class YellowWindow extends JFrame

{

private JPanel contentPane;

public YellowWindow()

{

try { jbInit(); } catch(Exception e) { e.printStackTrace(); }

}

private void jbInit() throws Exception

{

contentPane=(JPanel)this.getContentPane();

this.setSize(new Dimension(400, 300));

contentPane.setBackground(Color.YELLOW);

}

}

(15)

class App

package it.unitn.science.prog2.guiApp;

import javax.swing.*;

import java.awt.*;

public class App

{

JFrame finestra=null;

public static void main(String[ ] a){

new App();

}

public App() {

(16)

class App

private void setupGraphicEnvironment() {

finestra = new YellowWindow(); //new CalculatorWindow

// trova le dimensioni dello schermo e della finestra

Dimension screenSize =

Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = finestra.getSize();

// assicurati che la finestra non sia più grande dello schermo

if (frameSize.height > screenSize.height)

frameSize.height = screenSize.height;

if (frameSize.width > screenSize.width)

frameSize.width = screenSize.width;

(17)

class App

// centra la finestra nello schermo

finestra.setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

// fai in modo che la chiusura della finestra

// termini l'applicazione

finestra.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE );

// rendi la finestra visibile

(18)

18

Event Listeners

Some Events and Their Associated Event Listeners

Act that Results in the Event Listener Type User clicks a button, presses Enter while typing

in a text field, or chooses a menu item ActionListener
 User closes a frame (main window) WindowListener
 User presses a mouse button while the cursor is

over a component MouseListener


User moves the mouse over a component MouseMotionListener


Component becomes visible ComponentListener


Component gets the keyboard focus FocusListener


Table or list selection changes ListSelectionListener
 Any property in a component changes such as

the text on a label PropertyChangeListener


(19)

19

ActionListener

public interface ActionListener extends EventListener

The listener interface for receiving action events. The

class that is interested in processing an action event

implements this interface, and the object created with

that class is registered with a component, using the

component's addActionListener method.

(20)

20

ActionEvent

ActionEvent extends AWTEvent

A semantic event which indicates that a component-

defined action occured. This high-level event is

generated by a component (such as a Button) when

the component-specific action occurs (such as being

pressed). The event is passed to every every

ActionListener object that registered to receive such

events using the component's addActionListener

method.

(21)

21

ActionEvent

Method Summary

String getActionCommand()

Returns the command string associated with this action.

int getModifiers()

Returns the modifier keys held down during this action event.

long getWhen()

Returns the timestamp of when this event occurred.

String paramString()

Returns a parameter string identifying this action event.

Methods Inherited

(22)

Seconda applicazione

ButtonPanel Painter

JFrame

ActionListener

JPanel

Button

addActionListener

3

(23)

23

Esempio

package actionlistener;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.JFrame;

public class ButtonPanel extends JPanel { public ButtonPanel() {

super();

JButton button1 = new JButton("Giallo");

JButton button2 = new JButton("Verde");

JButton button3 = new JButton("Rosso");

this.add(button1);

this.add(button2);

this.add(button3);

Painter azioneGiallo = new Painter(Color.YELLOW,this);

Painter azioneVerde = new Painter( Color.GREEN,this);

(24)

24

Esempio - continua

public static void main(String a[]) { JFrame f=new JFrame();

f.setContentPane(new ButtonPanel());

f.setSize(300,300);

f.setVisible(true);

}

}

class Painter implements ActionListener { private Color colore;

private JPanel contenitore;

public Painter(Color colore, JPanel contenitore) { this.colore = colore;

this.contenitore=contenitore;

}

public void actionPerformed(ActionEvent actionEvent) { contenitore.setBackground(colore);

} }

(25)

25

Esempio 2

public class ButtonPanel extends JPanel { public ButtonPanel() {

super();

Painter p=new Painter(this);

String c[]={"Giallo","Verde","Rosso"};

for (int i=0;i<c.length;i++) { JButton b=new JButton(c[i]);

this.add(b);

b.addActionListener(p);

// b.setActionCommand(c[i]);

} }

public static void main(String a[]) { JFrame f=new JFrame();

f.setContentPane(new ButtonPanel());

(26)

26

Esempio 2 - continua

class Painter implements ActionListener { private JPanel contenitore;

private Color colore;

public Painter(JPanel contenitore) { this.contenitore=contenitore;

}

public void actionPerformed(ActionEvent actionEvent) { String s=((JButton)actionEvent.getSource()).getText();

//String s=actionEvent.getActionCommand();

if (s.equals("Giallo")) colore=Color.YELLOW;

else if (s.equals("Rosso")) colore=Color.RED;

else if (s.equals("Verde")) colore=Color.GREEN;

contenitore.setBackground(colore);

} }

(27)

27

Esempio 3

public class ButtonPanel extends JPanel { public ButtonPanel() {

super();

Painter p=new Painter(this);

this.setLayout(null);

String c[]={"Giallo","Verde","Rosso"};

for (int i=0;i<c.length;i++) { JButton b=new JButton(c[i]);

b.setSize(100,50);

b.setLocation(i*100,i*50);

this.add(b);

b.addActionListener(p);

(28)

28

Compito

Scrivere un applicazione contenente un bottone

che quando viene premuto si sposta altrove

nella finestra.

Scrivere una applicazione contenente due

bottoni: uno ingrandisce la dimensione della

finestra, l’altro la rimpicciolisce

(29)

29

Mouse events

This low-level event is generated by a component object

for:

Mouse Events

 

a mouse button is pressed

 

a mouse button is released

 

a mouse button is clicked (pressed and released)

 

the mouse cursor enters the unobscured part of

component's geometry

 

the mouse cursor exits the unobscured part of

component's geometry

(30)

30

Compito

Scrivere un applicazione contenente un TextField

il cui valore inizialmente è zero, e che viene

incrementato di uno ogni volta che il bottone

del mouse viene cliccato.

Scrivere un’applicazione contenente un bottone

che si posiziona dove viene cliccato il bottone

del mouse. Se invece viene cliccato il bottone

grafico, questo si riposiziona nella sua sede

iniziale.

(31)

Pluggable Look&Feel

(32)

Scelta del Look&Feel

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.

(33)

Scelta del Look&Feel

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.

}

(34)

Available Look&Feel

"com.sun.java.swing.plaf.gtk.GTKLookAndFeel"

Specifies the GTK+ look and feel. Introduced in release

1.4.2.

"javax.swing.plaf.metal.MetalLookAndFeel"

Specifies the Java look and feel.

"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"

Specifies the Windows look and feel. Currently, you can

use this look and feel only on Microsoft Windows

systems.

"com.sun.java.swing.plaf.motif.MotifLookAndFeel"

Specifies the CDE/Motif look and feel. This look and

feel can be used on any platform.

Figure

Updating...

References