SlideShare a Scribd company logo
1 of 44
GRAPHICS PROGRAMMING
PROGRAMMAZIONE CONCORRENTE E DISTR.
Università degli Studi di Padova
Dipartimento di Matematica
Corso di Laurea in Informatica, A.A. 2015 – 2016
rcardin@math.unipd.it
Programmazione concorrente e distribuita
SUMMARY
 Introducing Swing
 Main components
 Layout management
 Event handling
2Riccardo Cardin
Programmazione concorrente e distribuita
INTRODUCTION
 A little bit of history
 Java 1.0 refers to the Abstract Window Toolkit (AWT)
for simple GUI programming
 AWT delegates to the underlying OS the responsibility to
create graphical components («peers»)
 Look and feel of target platform
 It was very hard to create high-quality portable GUIs
 Java 1.2 intoduces Swing
 Graphic components are painted onto blank windows
 The only functionality required from the underlying
windowing system is a way to put up windows and to paint
onto them
 Build on top of AWT
3Riccardo Cardin
Programmazione concorrente e distribuita
INTRODUCTION
4Riccardo Cardin
Programmazione concorrente e distribuita
INTRODUCTION
 Swing features
 A little bit slower than AWT
 It’s not a real problem on modern machines
 Rich and convenient set of user interface elements
 Few dependencies on the underlying platform
 Consistent user experience across platforms
 Drawback: different look-and-feel from native GUIs
 Many different look-and-feels (themes)
 Metal, Ocean and Synth (JSE 5.0), Nimbus (JSE 7.0, vector
drawings)
 Package javax.swing: it is considered a Java ext.
5Riccardo Cardin
Programmazione concorrente e distribuita
INTRODUCTION
 Swing Ocean look-and-feel
6Riccardo Cardin
Programmazione concorrente e distribuita
MAIN COMPONENTS
 Frame
 Top level window, Frame (AWT) or JFrame (Swing)
 The only Swing component that is not painted on the canvas
 Always use «J» components, which belong from Swing
7Riccardo Cardin
EventQueue.invokeLater(new Runnable() {
public void run() {
SimpleFrame frame = new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
class SimpleFrame extends JFrame {
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;
public SimpleFrame() {
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
}
Programmazione concorrente e distribuita
MAIN COMPONENTS
 Let me explain what’s going on in here...
 By default a frame as size of 0 x 0 pixels, so
SimpleFrame set the size of the frame in its ctor
 You have to define what should happen when the
user closes the application’s frame
 JFrame.EXIT_ON_CLOSE: the program exit on close
 Event dispatch thread
 Finally, a frame has to be made visible, using
setVisible(true)
8Riccardo Cardin
EventQueue.invokeLater(new Runnable() {
public void run() {
// Configuration statement
}
});
You have to do ALWAYS
in this way!!!
Programmazione concorrente e distribuita
MAIN COMPONENTS
 Frame hierarchy
 Component / Windows
 Component is the base class of
every GUI object
 Resize and reshape actions
 Frame properties
 set / get methods
 Toolkit class
 Used to bind some components
to a particular native toolkit impl.
 Adapter pattern
9Riccardo Cardin
Toolkit kit = Toolkit.getDefaultToolkit();
Programmazione concorrente e distribuita
MAIN COMPONENTS
 Display information in a component
 DO NOT DRAW DIRECTLY ONTO A FRAME!
 A frame is considered a container for components
 Use the content pane instead
 Components are instances of JComponent / JPanel
 Implement paintComponent method, that is called by the
event handler every time a window needs to be redrawn
10Riccardo Cardin
// Get the content pane and draw something on it
Container contentPane = frame.getContentPane();
Component c = /* . . . */;
contentPane.add(c);
class MyComponent extends JComponent {
public void paintComponent(Graphics g) {
// code for drawing
}}
Programmazione concorrente e distribuita
MAIN COMPONENTS
11Riccardo Cardin
Used to organize the
menu bar and
content pane and to
implement
look-and-feel
Used to add
Components and to
draw something
onto the frame
Programmazione concorrente e distribuita
MAIN COMPONENTS
12Riccardo Cardin
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 JDK has not form designer tools
 You need to write code to position (lay out) the UI
components where you want them to be
 Buttons, text fields, and other UI elements extend the
class Component.
 Components can be placed inside containers, such as panel.
 Containers can themselves be put inside other containers
 Container extends Component
 Composite pattern
13Riccardo Cardin
In general components are placed inside containers, and a layout
manager determines the position and sizes of the components in the
container
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
14Riccardo Cardin
Container class
stores references to
itself
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
15Riccardo Cardin
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 Composite pattern
 In Swing, the problem is that leaf components are
subclasses of composite class
16Riccardo Cardin
It is a composition
of Component
objects
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 Flowlayout
 Elements are put in a row, sized at their preferred size
 Default layout manager for a panel
 If the horizontal space in the container is too small,
the layout uses multiple rows.
 Elements are centered horizontally by default
 Layout changes accordingly to container size
 Constructor permits to specify:
 Left, right or center alignment
 Vertical or horizontal gaps
17Riccardo Cardin
Elements are put in
rows
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 Add 3 buttons to a JPanel
18Riccardo Cardin
public class BorderLayoutExample extends JFrame {
public BorderLayoutExample(String title) {
super(title);
// Set the size of the window
setSize(300, 200);
// Add component to frame
addComponentsToPane(getContentPane());
}
private void addComponentsToPane(final Container pane) {
// Panel with FlowLayout as default layout manager
JPanel controls = new JPanel();
controls.add(new JButton("Button 1"));
controls.add(new JButton("Button 2"));
controls.add(new JButton("Button 3"));
// Content pane of the frame, BorderLayout as default
pane.add(controls, BorderLayout.SOUTH);
}
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 BorderLayout
 Defines 5 regions in which elements can be placed
 Default layout manager of the JFrame content panel
 BorderLayout.NORTH, BorderLayout.EAST...
 Center is the default position
 The edge components are laid first
 When the container is resized, the dim. of
the edge components are unchanged
 It grows all components to fill the
available space
 Use an intermediate JPanel to contain the
elements
19Riccardo Cardin
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 Build a window with 3 buttons at the bottom
20Riccardo Cardin
public class BorderLayoutExample extends JFrame {
public BorderLayoutExample(String title) {
super(title);
// Set the size of the window
setSize(300, 200);
// Add component to frame
addComponentsToPane(getContentPane());
}
private void addComponentsToPane(final Container pane) {
// Panel with FlowLayout as default layout manager
JPanel controls = new JPanel();
controls.add(new JButton("Button 1"));
controls.add(new JButton("Button 2"));
controls.add(new JButton("Button 3"));
// Content pane of the frame, BorderLayout as default
pane.add(controls, BorderLayout.SOUTH);
}
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 GridLayout
 Arranges all components in rows and columns like a
spreadsheet
 All components are given the same size (also in case of
resizing of the window)
 Usually used to model a small part of a UI, rather than the
whole windows
 Components are added starting from the first entry in
the first row, then the second entry and so on
21Riccardo Cardin
// Get the content pane and draw something on it
// Valuing with a 0 the number of rows will allow the layout to
// use as many rows as necessary
panel.setLayout(new GridLayout(4, 4));
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 Build a windows with 4 buttons put in 2 rows
22Riccardo Cardin
public class GridLayoutExample extends JFrame {
public BorderLayoutExample(String title) {
super(title);
// Set the size of the window
setSize(300, 200);
// Add component to frame
addComponentsToPane(getContentPane());
}
private void addComponentsToPane(final Container pane) {
// Set GridLayout to the panelb
JPanel controls = new JPanel();
controls.setLayout(new GridLayout(2, 2));
controls.add(new JButton("Button 1"));
controls.add(new JButton("Button 2"));
controls.add(new JButton("Button 3"));
controls.add(new JButton("Button 4"));
pane.add(controls;
}
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 CardLayout
 Used to model two or more components that share
the same display space
 It is like playing card in a stack, where only the top
card (component) is visible at any time
 You can ask for either the first or the last card
 You can ask to flip the deck backwards or forwards
 You can specify a card with a specific name
23Riccardo Cardin
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
 Build a window with two cards
24Riccardo Cardin
public class CardLayoutExample extends JFrame {
// ...
private void addComponentsToPane(final Container pane) {
// ...
cards = new JPanel(new CardLayout());
cards.add(createCard1(), "Card 1");
cards.add(createCard2(), "Card 2");
}
private JPanel createCombo() {
// ...
// Add combo a listener
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
// Get the layout
CardLayout layuot = (CardLayout) cards.getLayout();
layuot.show(cards, (String) e.getItem());
}
});
We will introduce
listeners in a
moment
Programmazione concorrente e distribuita
LAYOUT MANAGEMENT
25Riccardo Cardin
Programmazione concorrente e distribuita
EVENT HANDLING
 An operating environment constantly monitors
events and reports them to the program
 The program decides what to do in response to these
events
 Keystrokes, mouse clicks, and so on
 In Java (AWT) the developer has the full control on
how the events are transmitted from the event
source to events listeners
 Every object can be an event listener (delegation model)
 Event listeners register themself to an event source
 Obsever pattern
 Events are objects of type java.util.EventObject
26Riccardo Cardin
Programmazione concorrente e distribuita
EVENT HANDLING
 Summarizing
 A listener object implements a listener interface
 An event source can register listener and send them
event objects
 The event source sends events to every registered
listener
 The listener, using the event info, reacts accordingly
27Riccardo Cardin
class MyListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
// React to the event goes here
}
}
JButton button = new Jbutton("OK");
button.addActionListener(listener); // Registering a listener
Programmazione concorrente e distribuita
EVENT HANDLING
28Riccardo Cardin
An event source
registers a listener
Event
source
Event source notifies
the listener
The listener react
accordingly
Programmazione concorrente e distribuita
EVENT HANDLING
29Riccardo Cardin
Programmazione concorrente e distribuita
EVENT HANDLING
30Riccardo Cardin
Programmazione concorrente e distribuita
EVENT HANDLING
 Let’s see a simple example
 First of all, let’s create the buttons
 To create a button, simply create a JButton object, giving to
it a label or an icon
31Riccardo Cardin
We will show a panel populated with three buttons. When a button is
clicked, we want the background color of the panel to change to a
particular color.
// Create the buttons
JButton blueButton = new JButton("Yellow");
JButton blueButton = new JButton("Blue");
JButton redButton = new JButton("Red");
// Add them to a panel (flow layout anyone?)
buttonPanel.add(yellowButton);
buttonPanel.add(blueButton);
buttonPanel.add(redButton);
Programmazione concorrente e distribuita
EVENT HANDLING
 Let’s see a simple example
 Then, let’s define button listeners
32Riccardo Cardin
class ColorAction implements ActionListener {
private Color backgroundColor; // The color to set to the panel
public ColorAction(Color c) {
backgroundColor = c;
}
public void actionPerformed(ActionEvent event) {
// set panel background color
}
}
// Create the listeners
ColorAction yellowAction = new ColorAction(Color.YELLOW);
ColorAction blueAction = new ColorAction(Color.BLUE);
ColorAction redAction = new ColorAction(Color.RED);
// Register listeners to buttons
yellowButton.addActionListener(yellowAction);
blueButton.addActionListener(blueAction);
redButton.addActionListener(redAction);
Programmazione concorrente e distribuita
EVENT HANDLING
 Let’s see a simple example
 A problem rises: how can a listener modify a property
of the panel?
 Please, do not try to add listener’s func. to the frame
 Violation of separation of concerns
 Use inner classes instead!
33Riccardo Cardin
class ButtonFrame extends JFrame {
// The panel to change the color
private JPanel buttonPanel;
private class ColorAction implements ActionListener {
private Color backgroundColor;
public void actionPerformed(ActionEvent event) {
// Changing the color to the main class panel
buttonPanel.setBackground(backgroundColor);
}
}
}
Programmazione concorrente e distribuita
EVENT HANDLING
 Let’s see a simple example
 Can we go even further?
 Let’s use anonymous inner classes to handle events
 The inner class mechanism automatically generates a
constructor that stores all final variables that are used
 Closure anyone?!
34Riccardo Cardin
public void makeButton(String name, final Color backgroundColor) {
JButton button = new JButton(name);
buttonPanel.add(button);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
buttonPanel.setBackground(backgroundColor);
}
});
}
Programmazione concorrente e distribuita
EVENT HANDLING
35Riccardo Cardin
Programmazione concorrente e distribuita
EVENT HANDLING
 Let’s see a simple example
 If the anonymous inner class method calls one
method only, EventHandler class can be used
 Reflection mechanism
 The statement frame.loadData() is executed in response
of an event
 The statement
frame.loadData(event.getSource.getText()) is
executed
36Riccardo Cardin
loadButton.addActionListener(
EventHandler.create(ActionListener.class, frame, "loadData"));
EventHandler.create(ActionListener.class, frame, "loadData",
"source.text");
Programmazione concorrente e distribuita
EVENT HANDLING
 Not all events are simply as button clicks
 The listener WindowListener interface, that handles
WindowEvent objects, has 7 methods
 Probably you don’t need to defined them all!
 Each AWT listener interfaces with more than one
method comes with a companion Adapter
 Implements all methods with "do nothing" operations
37Riccardo Cardin
public interface WindowListener {
void windowOpened(WindowEvent e);
void windowClosing(WindowEvent e);
void windowClosed(WindowEvent e);
void windowIconified(WindowEvent e);
void windowDeiconified(WindowEvent e);
void windowActivated(WindowEvent e);
void windowDeactivated(WindowEvent e);
}
Programmazione concorrente e distribuita
EVENT HANDLING
 Adapter pattern
 Class adapter
 Object adapter
38Riccardo Cardin
Target interface
Source interface
Adapt source interface
to target
Programmazione concorrente e distribuita
EVENT HANDLING
 What if you need to share the same behaviour
in response to more than one event?
 Use Action interface, that extends ActionListener
 It encapsulates the description of the «command» and
parameters that are necessary to carry out the command
 Command pattern
 AbstractAction is an adapter class provided by the JDK
 Then simply add the action to your UI components using
constructor
39Riccardo Cardin
void actionPerformed(ActionEvent event)
// Add a property to the action object indexed by key
void putValue(String key, Object value)
// Get a property indexed by key
Object getValue(String key)
new JButton(new MyAction());
Programmazione concorrente e distribuita
EVENT HANDLING
Interface Method Params Generated by
ActionListener actionPerformed ActionEvent
• getActionCommand
• getModifiers
ActionButton
JComboBox
JTextField
Timer
AdjustmentListener adjustementValueChang
ed
AdjustementEvent
• getAdjustable
• getAdjustableType
• getValue
JScrollbar
ItemListener itemStateChanged ItemEvent
• getItem
• getItemSelectable
• getStateChange
AbstractButton
JComboBox
FocusListener focusGained
focusLost
FocusEvent
• isTemporary
Component
KeyListener keyPressed
keyReleased
keyTyped
KeyEvent
• getKeyChar
• getKeyCode
• getKeyModifiersText
• getKeyText
• isActionKey
Component
40Riccardo Cardin
Programmazione concorrente e distribuita
EVENT HANDLING
...and so on
41Riccardo Cardin
Interface Method Params Generated by
MouseListener mousePressed
mouseReleased
mouseEntered
mouseExited
mouseClicked
MouseEvent
• getClickCount
• getX
• getY
• getPoint
• translatePoint
Component
MouseMotionListener mouseDragged
mouseMoved
MouseEvent Component
MouseWheelListener mouseWheelMoved MouseWheelEvent
• getWheelRotation
• getScrollAmount
Component
WindowListener windowClosing
windowOpened
windowIconified
windowDeiconified
windowClosed
windowActivated
windowDeactivated
WindowEvent
• getWindow
Window
Programmazione concorrente e distribuita
CONCLUSIONS
42Riccardo Cardin
Programmazione concorrente e distribuita
EXAMPLES
43Riccardo Cardin
https://github.com/rcardin/pcd-snippets
Programmazione concorrente e distribuita
REFERENCES
 Chap. 7 «Graphics Programming», Core Java Volume I -
Fundamentals, Cay Horstmann, Gary Cornell, 2012, Prentice Hall
 Chap. 8 «Event Handling», Core Java Volume I - Fundamentals, Cay
Horstmann, Gary Cornell, 2012, Prentice Hall
 Chap. 9 «User Interface Components with Swing», Core Java
Volume I - Fundamentals, Cay Horstmann, Gary Cornell, 2012,
Prentice Hall
 How to Use FlowLayout
https://docs.oracle.com/javase/tutorial/uiswing/layout/flow.html
 How to Use CardLayout
https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html
 How to Use Actions
https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html
44Riccardo Cardin

More Related Content

What's hot

Module 2: C# 3.0 Language Enhancements (Material)
Module 2: C# 3.0 Language Enhancements (Material)Module 2: C# 3.0 Language Enhancements (Material)
Module 2: C# 3.0 Language Enhancements (Material)Mohamed Saleh
 
Diving in OOP (Day 4): Polymorphism and Inheritance (All About Abstract Class...
Diving in OOP (Day 4): Polymorphism and Inheritance (All About Abstract Class...Diving in OOP (Day 4): Polymorphism and Inheritance (All About Abstract Class...
Diving in OOP (Day 4): Polymorphism and Inheritance (All About Abstract Class...Akhil Mittal
 
Java Tutorial | My Heart
Java Tutorial | My HeartJava Tutorial | My Heart
Java Tutorial | My HeartBui Kiet
 
Vlsi cadence tutorial_ahmet_ilker_şin
Vlsi cadence tutorial_ahmet_ilker_şinVlsi cadence tutorial_ahmet_ilker_şin
Vlsi cadence tutorial_ahmet_ilker_şinilker Şin
 
Big Java Chapter 1
Big Java Chapter 1Big Java Chapter 1
Big Java Chapter 1Maria Joslin
 
Shape12 6
Shape12 6Shape12 6
Shape12 6pslulli
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to javaciklum_ods
 
[Apostila] programação arduíno brian w. evans
[Apostila] programação arduíno   brian w. evans[Apostila] programação arduíno   brian w. evans
[Apostila] programação arduíno brian w. evansWeb-Desegner
 
Design functional solutions in Java, a practical example
Design functional solutions in Java, a practical exampleDesign functional solutions in Java, a practical example
Design functional solutions in Java, a practical exampleMarian Wamsiedel
 
GUI Programming In Java
GUI Programming In JavaGUI Programming In Java
GUI Programming In Javayht4ever
 
Graphical User Interface (GUI) - 1
Graphical User Interface (GUI) - 1Graphical User Interface (GUI) - 1
Graphical User Interface (GUI) - 1PRN USM
 

What's hot (20)

Module 2: C# 3.0 Language Enhancements (Material)
Module 2: C# 3.0 Language Enhancements (Material)Module 2: C# 3.0 Language Enhancements (Material)
Module 2: C# 3.0 Language Enhancements (Material)
 
Diving in OOP (Day 4): Polymorphism and Inheritance (All About Abstract Class...
Diving in OOP (Day 4): Polymorphism and Inheritance (All About Abstract Class...Diving in OOP (Day 4): Polymorphism and Inheritance (All About Abstract Class...
Diving in OOP (Day 4): Polymorphism and Inheritance (All About Abstract Class...
 
Java Tutorial | My Heart
Java Tutorial | My HeartJava Tutorial | My Heart
Java Tutorial | My Heart
 
Vlsi cadence tutorial_ahmet_ilker_şin
Vlsi cadence tutorial_ahmet_ilker_şinVlsi cadence tutorial_ahmet_ilker_şin
Vlsi cadence tutorial_ahmet_ilker_şin
 
Big Java Chapter 1
Big Java Chapter 1Big Java Chapter 1
Big Java Chapter 1
 
Shape12 6
Shape12 6Shape12 6
Shape12 6
 
Applets in java
Applets in javaApplets in java
Applets in java
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to java
 
VLSI lab report using Cadence tool
VLSI lab report using Cadence toolVLSI lab report using Cadence tool
VLSI lab report using Cadence tool
 
Aptitute question papers in c
Aptitute question papers in cAptitute question papers in c
Aptitute question papers in c
 
Simware Simdeveloper
Simware SimdeveloperSimware Simdeveloper
Simware Simdeveloper
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Applet life cycle
Applet life cycleApplet life cycle
Applet life cycle
 
GCC RTL and Machine Description
GCC RTL and Machine DescriptionGCC RTL and Machine Description
GCC RTL and Machine Description
 
[Apostila] programação arduíno brian w. evans
[Apostila] programação arduíno   brian w. evans[Apostila] programação arduíno   brian w. evans
[Apostila] programação arduíno brian w. evans
 
Basic of Applet
Basic of AppletBasic of Applet
Basic of Applet
 
Design functional solutions in Java, a practical example
Design functional solutions in Java, a practical exampleDesign functional solutions in Java, a practical example
Design functional solutions in Java, a practical example
 
GUI Programming In Java
GUI Programming In JavaGUI Programming In Java
GUI Programming In Java
 
Graphical User Interface (GUI) - 1
Graphical User Interface (GUI) - 1Graphical User Interface (GUI) - 1
Graphical User Interface (GUI) - 1
 
GUI Programming with Java
GUI Programming with JavaGUI Programming with Java
GUI Programming with Java
 

Viewers also liked

Software architecture patterns
Software architecture patternsSoftware architecture patterns
Software architecture patternsRiccardo Cardin
 
Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionRiccardo Cardin
 
Java - Generic programming
Java - Generic programmingJava - Generic programming
Java - Generic programmingRiccardo Cardin
 
Scala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyScala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyBozhidar Bozhanov
 
Java - Collections framework
Java - Collections frameworkJava - Collections framework
Java - Collections frameworkRiccardo Cardin
 
Errori comuni nei documenti di Analisi dei Requisiti
Errori comuni nei documenti di Analisi dei RequisitiErrori comuni nei documenti di Analisi dei Requisiti
Errori comuni nei documenti di Analisi dei RequisitiRiccardo Cardin
 
Introduzione ai Design Pattern
Introduzione ai Design PatternIntroduzione ai Design Pattern
Introduzione ai Design PatternRiccardo Cardin
 
Java - Concurrent programming - Thread's basics
Java - Concurrent programming - Thread's basicsJava - Concurrent programming - Thread's basics
Java - Concurrent programming - Thread's basicsRiccardo Cardin
 
Presto updates to 0.178
Presto updates to 0.178Presto updates to 0.178
Presto updates to 0.178Kai Sasaki
 
Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern StrutturaliRiccardo Cardin
 
Scala For Java Programmers
Scala For Java ProgrammersScala For Java Programmers
Scala For Java ProgrammersEnno Runne
 
Java - Remote method invocation
Java - Remote method invocationJava - Remote method invocation
Java - Remote method invocationRiccardo Cardin
 
Java- Concurrent programming - Synchronization (part 1)
Java- Concurrent programming - Synchronization (part 1)Java- Concurrent programming - Synchronization (part 1)
Java- Concurrent programming - Synchronization (part 1)Riccardo Cardin
 
Java- Concurrent programming - Synchronization (part 2)
Java- Concurrent programming - Synchronization (part 2)Java- Concurrent programming - Synchronization (part 2)
Java- Concurrent programming - Synchronization (part 2)Riccardo Cardin
 
A (too) Short Introduction to Scala
A (too) Short Introduction to ScalaA (too) Short Introduction to Scala
A (too) Short Introduction to ScalaRiccardo Cardin
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVMRiccardo Cardin
 
Java Exception Handling, Assertions and Logging
Java Exception Handling, Assertions and LoggingJava Exception Handling, Assertions and Logging
Java Exception Handling, Assertions and LoggingRiccardo Cardin
 

Viewers also liked (20)

Software architecture patterns
Software architecture patternsSoftware architecture patterns
Software architecture patterns
 
Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency Injection
 
Java - Generic programming
Java - Generic programmingJava - Generic programming
Java - Generic programming
 
Scala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyScala - the good, the bad and the very ugly
Scala - the good, the bad and the very ugly
 
Java - Collections framework
Java - Collections frameworkJava - Collections framework
Java - Collections framework
 
Java - Sockets
Java - SocketsJava - Sockets
Java - Sockets
 
Errori comuni nei documenti di Analisi dei Requisiti
Errori comuni nei documenti di Analisi dei RequisitiErrori comuni nei documenti di Analisi dei Requisiti
Errori comuni nei documenti di Analisi dei Requisiti
 
Diagrammi delle Classi
Diagrammi delle ClassiDiagrammi delle Classi
Diagrammi delle Classi
 
Introduzione ai Design Pattern
Introduzione ai Design PatternIntroduzione ai Design Pattern
Introduzione ai Design Pattern
 
Java - Concurrent programming - Thread's basics
Java - Concurrent programming - Thread's basicsJava - Concurrent programming - Thread's basics
Java - Concurrent programming - Thread's basics
 
Diagrammi di Sequenza
Diagrammi di SequenzaDiagrammi di Sequenza
Diagrammi di Sequenza
 
Presto updates to 0.178
Presto updates to 0.178Presto updates to 0.178
Presto updates to 0.178
 
Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern Strutturali
 
Scala For Java Programmers
Scala For Java ProgrammersScala For Java Programmers
Scala For Java Programmers
 
Java - Remote method invocation
Java - Remote method invocationJava - Remote method invocation
Java - Remote method invocation
 
Java- Concurrent programming - Synchronization (part 1)
Java- Concurrent programming - Synchronization (part 1)Java- Concurrent programming - Synchronization (part 1)
Java- Concurrent programming - Synchronization (part 1)
 
Java- Concurrent programming - Synchronization (part 2)
Java- Concurrent programming - Synchronization (part 2)Java- Concurrent programming - Synchronization (part 2)
Java- Concurrent programming - Synchronization (part 2)
 
A (too) Short Introduction to Scala
A (too) Short Introduction to ScalaA (too) Short Introduction to Scala
A (too) Short Introduction to Scala
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVM
 
Java Exception Handling, Assertions and Logging
Java Exception Handling, Assertions and LoggingJava Exception Handling, Assertions and Logging
Java Exception Handling, Assertions and Logging
 

Similar to Java Graphics Programming

Abstract Window Toolkit
Abstract Window ToolkitAbstract Window Toolkit
Abstract Window ToolkitRutvaThakkar1
 
Swingpre 150616004959-lva1-app6892
Swingpre 150616004959-lva1-app6892Swingpre 150616004959-lva1-app6892
Swingpre 150616004959-lva1-app6892renuka gavli
 
Swing and AWT in java
Swing and AWT in javaSwing and AWT in java
Swing and AWT in javaAdil Mehmoood
 
JEDI Slides-Intro2-Chapter19-Abstract Windowing Toolkit and Swing.pdf
JEDI Slides-Intro2-Chapter19-Abstract Windowing Toolkit and Swing.pdfJEDI Slides-Intro2-Chapter19-Abstract Windowing Toolkit and Swing.pdf
JEDI Slides-Intro2-Chapter19-Abstract Windowing Toolkit and Swing.pdfMarlouFelixIIICunana
 
Getting started with GUI programming in Java_1
Getting started with GUI programming in Java_1Getting started with GUI programming in Java_1
Getting started with GUI programming in Java_1Muhammad Shebl Farag
 
Java GUI Programming for beginners-graphics.pdf
Java GUI Programming for beginners-graphics.pdfJava GUI Programming for beginners-graphics.pdf
Java GUI Programming for beginners-graphics.pdfPBMaverick
 
Session2-J2ME development-environment
Session2-J2ME development-environmentSession2-J2ME development-environment
Session2-J2ME development-environmentmuthusvm
 
Md10 building java gu is
Md10 building java gu isMd10 building java gu is
Md10 building java gu isRakesh Madugula
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to GriffonJames Williams
 
Working with the Calculator program Once imported run the.pdf
Working with the Calculator program Once imported  run the.pdfWorking with the Calculator program Once imported  run the.pdf
Working with the Calculator program Once imported run the.pdficonsystemsslm
 
User Guide of Regression Test & Validation Tool (v1.0)
User Guide of Regression Test & Validation Tool (v1.0)User Guide of Regression Test & Validation Tool (v1.0)
User Guide of Regression Test & Validation Tool (v1.0)Chen Fang
 

Similar to Java Graphics Programming (20)

Swing
SwingSwing
Swing
 
L11cs2110sp13
L11cs2110sp13L11cs2110sp13
L11cs2110sp13
 
Abstract Window Toolkit
Abstract Window ToolkitAbstract Window Toolkit
Abstract Window Toolkit
 
Swingpre 150616004959-lva1-app6892
Swingpre 150616004959-lva1-app6892Swingpre 150616004959-lva1-app6892
Swingpre 150616004959-lva1-app6892
 
Swing and AWT in java
Swing and AWT in javaSwing and AWT in java
Swing and AWT in java
 
JEDI Slides-Intro2-Chapter19-Abstract Windowing Toolkit and Swing.pdf
JEDI Slides-Intro2-Chapter19-Abstract Windowing Toolkit and Swing.pdfJEDI Slides-Intro2-Chapter19-Abstract Windowing Toolkit and Swing.pdf
JEDI Slides-Intro2-Chapter19-Abstract Windowing Toolkit and Swing.pdf
 
Getting started with GUI programming in Java_1
Getting started with GUI programming in Java_1Getting started with GUI programming in Java_1
Getting started with GUI programming in Java_1
 
Chap1 1 1
Chap1 1 1Chap1 1 1
Chap1 1 1
 
Chap1 1.1
Chap1 1.1Chap1 1.1
Chap1 1.1
 
swingbasics
swingbasicsswingbasics
swingbasics
 
Ingles 2do parcial
Ingles   2do parcialIngles   2do parcial
Ingles 2do parcial
 
Java GUI Programming for beginners-graphics.pdf
Java GUI Programming for beginners-graphics.pdfJava GUI Programming for beginners-graphics.pdf
Java GUI Programming for beginners-graphics.pdf
 
Session2-J2ME development-environment
Session2-J2ME development-environmentSession2-J2ME development-environment
Session2-J2ME development-environment
 
Md10 building java gu is
Md10 building java gu isMd10 building java gu is
Md10 building java gu is
 
UNIT-2-AJAVA.pdf
UNIT-2-AJAVA.pdfUNIT-2-AJAVA.pdf
UNIT-2-AJAVA.pdf
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to Griffon
 
Working with the Calculator program Once imported run the.pdf
Working with the Calculator program Once imported  run the.pdfWorking with the Calculator program Once imported  run the.pdf
Working with the Calculator program Once imported run the.pdf
 
08graphics
08graphics08graphics
08graphics
 
User Guide of Regression Test & Validation Tool (v1.0)
User Guide of Regression Test & Validation Tool (v1.0)User Guide of Regression Test & Validation Tool (v1.0)
User Guide of Regression Test & Validation Tool (v1.0)
 
java swing
java swingjava swing
java swing
 

More from Riccardo Cardin

Java - Processing input and output
Java - Processing input and outputJava - Processing input and output
Java - Processing input and outputRiccardo Cardin
 
Java - Concurrent programming - Thread's advanced concepts
Java - Concurrent programming - Thread's advanced conceptsJava - Concurrent programming - Thread's advanced concepts
Java - Concurrent programming - Thread's advanced conceptsRiccardo Cardin
 
Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern ComportamentaliRiccardo Cardin
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern CreazionaliRiccardo Cardin
 
Mvc e di spring e angular js
Mvc e di   spring e angular jsMvc e di   spring e angular js
Mvc e di spring e angular jsRiccardo Cardin
 
Reactive programming principles
Reactive programming principlesReactive programming principles
Reactive programming principlesRiccardo Cardin
 

More from Riccardo Cardin (9)

Java - Processing input and output
Java - Processing input and outputJava - Processing input and output
Java - Processing input and output
 
Java - Concurrent programming - Thread's advanced concepts
Java - Concurrent programming - Thread's advanced conceptsJava - Concurrent programming - Thread's advanced concepts
Java - Concurrent programming - Thread's advanced concepts
 
Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern Comportamentali
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern Creazionali
 
Diagrammi di Attività
Diagrammi di AttivitàDiagrammi di Attività
Diagrammi di Attività
 
Diagrammi Use Case
Diagrammi Use CaseDiagrammi Use Case
Diagrammi Use Case
 
Introduzione a UML
Introduzione a UMLIntroduzione a UML
Introduzione a UML
 
Mvc e di spring e angular js
Mvc e di   spring e angular jsMvc e di   spring e angular js
Mvc e di spring e angular js
 
Reactive programming principles
Reactive programming principlesReactive programming principles
Reactive programming principles
 

Recently uploaded

Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineeringssuserb3a23b
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 

Recently uploaded (20)

Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Odoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting ServiceOdoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting Service
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineering
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 

Java Graphics Programming

  • 1. GRAPHICS PROGRAMMING PROGRAMMAZIONE CONCORRENTE E DISTR. Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2015 – 2016 rcardin@math.unipd.it
  • 2. Programmazione concorrente e distribuita SUMMARY  Introducing Swing  Main components  Layout management  Event handling 2Riccardo Cardin
  • 3. Programmazione concorrente e distribuita INTRODUCTION  A little bit of history  Java 1.0 refers to the Abstract Window Toolkit (AWT) for simple GUI programming  AWT delegates to the underlying OS the responsibility to create graphical components («peers»)  Look and feel of target platform  It was very hard to create high-quality portable GUIs  Java 1.2 intoduces Swing  Graphic components are painted onto blank windows  The only functionality required from the underlying windowing system is a way to put up windows and to paint onto them  Build on top of AWT 3Riccardo Cardin
  • 4. Programmazione concorrente e distribuita INTRODUCTION 4Riccardo Cardin
  • 5. Programmazione concorrente e distribuita INTRODUCTION  Swing features  A little bit slower than AWT  It’s not a real problem on modern machines  Rich and convenient set of user interface elements  Few dependencies on the underlying platform  Consistent user experience across platforms  Drawback: different look-and-feel from native GUIs  Many different look-and-feels (themes)  Metal, Ocean and Synth (JSE 5.0), Nimbus (JSE 7.0, vector drawings)  Package javax.swing: it is considered a Java ext. 5Riccardo Cardin
  • 6. Programmazione concorrente e distribuita INTRODUCTION  Swing Ocean look-and-feel 6Riccardo Cardin
  • 7. Programmazione concorrente e distribuita MAIN COMPONENTS  Frame  Top level window, Frame (AWT) or JFrame (Swing)  The only Swing component that is not painted on the canvas  Always use «J» components, which belong from Swing 7Riccardo Cardin EventQueue.invokeLater(new Runnable() { public void run() { SimpleFrame frame = new SimpleFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); class SimpleFrame extends JFrame { private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200; public SimpleFrame() { setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); } }
  • 8. Programmazione concorrente e distribuita MAIN COMPONENTS  Let me explain what’s going on in here...  By default a frame as size of 0 x 0 pixels, so SimpleFrame set the size of the frame in its ctor  You have to define what should happen when the user closes the application’s frame  JFrame.EXIT_ON_CLOSE: the program exit on close  Event dispatch thread  Finally, a frame has to be made visible, using setVisible(true) 8Riccardo Cardin EventQueue.invokeLater(new Runnable() { public void run() { // Configuration statement } }); You have to do ALWAYS in this way!!!
  • 9. Programmazione concorrente e distribuita MAIN COMPONENTS  Frame hierarchy  Component / Windows  Component is the base class of every GUI object  Resize and reshape actions  Frame properties  set / get methods  Toolkit class  Used to bind some components to a particular native toolkit impl.  Adapter pattern 9Riccardo Cardin Toolkit kit = Toolkit.getDefaultToolkit();
  • 10. Programmazione concorrente e distribuita MAIN COMPONENTS  Display information in a component  DO NOT DRAW DIRECTLY ONTO A FRAME!  A frame is considered a container for components  Use the content pane instead  Components are instances of JComponent / JPanel  Implement paintComponent method, that is called by the event handler every time a window needs to be redrawn 10Riccardo Cardin // Get the content pane and draw something on it Container contentPane = frame.getContentPane(); Component c = /* . . . */; contentPane.add(c); class MyComponent extends JComponent { public void paintComponent(Graphics g) { // code for drawing }}
  • 11. Programmazione concorrente e distribuita MAIN COMPONENTS 11Riccardo Cardin Used to organize the menu bar and content pane and to implement look-and-feel Used to add Components and to draw something onto the frame
  • 12. Programmazione concorrente e distribuita MAIN COMPONENTS 12Riccardo Cardin
  • 13. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  JDK has not form designer tools  You need to write code to position (lay out) the UI components where you want them to be  Buttons, text fields, and other UI elements extend the class Component.  Components can be placed inside containers, such as panel.  Containers can themselves be put inside other containers  Container extends Component  Composite pattern 13Riccardo Cardin In general components are placed inside containers, and a layout manager determines the position and sizes of the components in the container
  • 14. Programmazione concorrente e distribuita LAYOUT MANAGEMENT 14Riccardo Cardin Container class stores references to itself
  • 15. Programmazione concorrente e distribuita LAYOUT MANAGEMENT 15Riccardo Cardin
  • 16. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  Composite pattern  In Swing, the problem is that leaf components are subclasses of composite class 16Riccardo Cardin It is a composition of Component objects
  • 17. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  Flowlayout  Elements are put in a row, sized at their preferred size  Default layout manager for a panel  If the horizontal space in the container is too small, the layout uses multiple rows.  Elements are centered horizontally by default  Layout changes accordingly to container size  Constructor permits to specify:  Left, right or center alignment  Vertical or horizontal gaps 17Riccardo Cardin Elements are put in rows
  • 18. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  Add 3 buttons to a JPanel 18Riccardo Cardin public class BorderLayoutExample extends JFrame { public BorderLayoutExample(String title) { super(title); // Set the size of the window setSize(300, 200); // Add component to frame addComponentsToPane(getContentPane()); } private void addComponentsToPane(final Container pane) { // Panel with FlowLayout as default layout manager JPanel controls = new JPanel(); controls.add(new JButton("Button 1")); controls.add(new JButton("Button 2")); controls.add(new JButton("Button 3")); // Content pane of the frame, BorderLayout as default pane.add(controls, BorderLayout.SOUTH); }
  • 19. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  BorderLayout  Defines 5 regions in which elements can be placed  Default layout manager of the JFrame content panel  BorderLayout.NORTH, BorderLayout.EAST...  Center is the default position  The edge components are laid first  When the container is resized, the dim. of the edge components are unchanged  It grows all components to fill the available space  Use an intermediate JPanel to contain the elements 19Riccardo Cardin
  • 20. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  Build a window with 3 buttons at the bottom 20Riccardo Cardin public class BorderLayoutExample extends JFrame { public BorderLayoutExample(String title) { super(title); // Set the size of the window setSize(300, 200); // Add component to frame addComponentsToPane(getContentPane()); } private void addComponentsToPane(final Container pane) { // Panel with FlowLayout as default layout manager JPanel controls = new JPanel(); controls.add(new JButton("Button 1")); controls.add(new JButton("Button 2")); controls.add(new JButton("Button 3")); // Content pane of the frame, BorderLayout as default pane.add(controls, BorderLayout.SOUTH); }
  • 21. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  GridLayout  Arranges all components in rows and columns like a spreadsheet  All components are given the same size (also in case of resizing of the window)  Usually used to model a small part of a UI, rather than the whole windows  Components are added starting from the first entry in the first row, then the second entry and so on 21Riccardo Cardin // Get the content pane and draw something on it // Valuing with a 0 the number of rows will allow the layout to // use as many rows as necessary panel.setLayout(new GridLayout(4, 4));
  • 22. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  Build a windows with 4 buttons put in 2 rows 22Riccardo Cardin public class GridLayoutExample extends JFrame { public BorderLayoutExample(String title) { super(title); // Set the size of the window setSize(300, 200); // Add component to frame addComponentsToPane(getContentPane()); } private void addComponentsToPane(final Container pane) { // Set GridLayout to the panelb JPanel controls = new JPanel(); controls.setLayout(new GridLayout(2, 2)); controls.add(new JButton("Button 1")); controls.add(new JButton("Button 2")); controls.add(new JButton("Button 3")); controls.add(new JButton("Button 4")); pane.add(controls; }
  • 23. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  CardLayout  Used to model two or more components that share the same display space  It is like playing card in a stack, where only the top card (component) is visible at any time  You can ask for either the first or the last card  You can ask to flip the deck backwards or forwards  You can specify a card with a specific name 23Riccardo Cardin
  • 24. Programmazione concorrente e distribuita LAYOUT MANAGEMENT  Build a window with two cards 24Riccardo Cardin public class CardLayoutExample extends JFrame { // ... private void addComponentsToPane(final Container pane) { // ... cards = new JPanel(new CardLayout()); cards.add(createCard1(), "Card 1"); cards.add(createCard2(), "Card 2"); } private JPanel createCombo() { // ... // Add combo a listener comboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { // Get the layout CardLayout layuot = (CardLayout) cards.getLayout(); layuot.show(cards, (String) e.getItem()); } }); We will introduce listeners in a moment
  • 25. Programmazione concorrente e distribuita LAYOUT MANAGEMENT 25Riccardo Cardin
  • 26. Programmazione concorrente e distribuita EVENT HANDLING  An operating environment constantly monitors events and reports them to the program  The program decides what to do in response to these events  Keystrokes, mouse clicks, and so on  In Java (AWT) the developer has the full control on how the events are transmitted from the event source to events listeners  Every object can be an event listener (delegation model)  Event listeners register themself to an event source  Obsever pattern  Events are objects of type java.util.EventObject 26Riccardo Cardin
  • 27. Programmazione concorrente e distribuita EVENT HANDLING  Summarizing  A listener object implements a listener interface  An event source can register listener and send them event objects  The event source sends events to every registered listener  The listener, using the event info, reacts accordingly 27Riccardo Cardin class MyListener implements ActionListener { public void actionPerformed(ActionEvent event) { // React to the event goes here } } JButton button = new Jbutton("OK"); button.addActionListener(listener); // Registering a listener
  • 28. Programmazione concorrente e distribuita EVENT HANDLING 28Riccardo Cardin An event source registers a listener Event source Event source notifies the listener The listener react accordingly
  • 29. Programmazione concorrente e distribuita EVENT HANDLING 29Riccardo Cardin
  • 30. Programmazione concorrente e distribuita EVENT HANDLING 30Riccardo Cardin
  • 31. Programmazione concorrente e distribuita EVENT HANDLING  Let’s see a simple example  First of all, let’s create the buttons  To create a button, simply create a JButton object, giving to it a label or an icon 31Riccardo Cardin We will show a panel populated with three buttons. When a button is clicked, we want the background color of the panel to change to a particular color. // Create the buttons JButton blueButton = new JButton("Yellow"); JButton blueButton = new JButton("Blue"); JButton redButton = new JButton("Red"); // Add them to a panel (flow layout anyone?) buttonPanel.add(yellowButton); buttonPanel.add(blueButton); buttonPanel.add(redButton);
  • 32. Programmazione concorrente e distribuita EVENT HANDLING  Let’s see a simple example  Then, let’s define button listeners 32Riccardo Cardin class ColorAction implements ActionListener { private Color backgroundColor; // The color to set to the panel public ColorAction(Color c) { backgroundColor = c; } public void actionPerformed(ActionEvent event) { // set panel background color } } // Create the listeners ColorAction yellowAction = new ColorAction(Color.YELLOW); ColorAction blueAction = new ColorAction(Color.BLUE); ColorAction redAction = new ColorAction(Color.RED); // Register listeners to buttons yellowButton.addActionListener(yellowAction); blueButton.addActionListener(blueAction); redButton.addActionListener(redAction);
  • 33. Programmazione concorrente e distribuita EVENT HANDLING  Let’s see a simple example  A problem rises: how can a listener modify a property of the panel?  Please, do not try to add listener’s func. to the frame  Violation of separation of concerns  Use inner classes instead! 33Riccardo Cardin class ButtonFrame extends JFrame { // The panel to change the color private JPanel buttonPanel; private class ColorAction implements ActionListener { private Color backgroundColor; public void actionPerformed(ActionEvent event) { // Changing the color to the main class panel buttonPanel.setBackground(backgroundColor); } } }
  • 34. Programmazione concorrente e distribuita EVENT HANDLING  Let’s see a simple example  Can we go even further?  Let’s use anonymous inner classes to handle events  The inner class mechanism automatically generates a constructor that stores all final variables that are used  Closure anyone?! 34Riccardo Cardin public void makeButton(String name, final Color backgroundColor) { JButton button = new JButton(name); buttonPanel.add(button); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { buttonPanel.setBackground(backgroundColor); } }); }
  • 35. Programmazione concorrente e distribuita EVENT HANDLING 35Riccardo Cardin
  • 36. Programmazione concorrente e distribuita EVENT HANDLING  Let’s see a simple example  If the anonymous inner class method calls one method only, EventHandler class can be used  Reflection mechanism  The statement frame.loadData() is executed in response of an event  The statement frame.loadData(event.getSource.getText()) is executed 36Riccardo Cardin loadButton.addActionListener( EventHandler.create(ActionListener.class, frame, "loadData")); EventHandler.create(ActionListener.class, frame, "loadData", "source.text");
  • 37. Programmazione concorrente e distribuita EVENT HANDLING  Not all events are simply as button clicks  The listener WindowListener interface, that handles WindowEvent objects, has 7 methods  Probably you don’t need to defined them all!  Each AWT listener interfaces with more than one method comes with a companion Adapter  Implements all methods with "do nothing" operations 37Riccardo Cardin public interface WindowListener { void windowOpened(WindowEvent e); void windowClosing(WindowEvent e); void windowClosed(WindowEvent e); void windowIconified(WindowEvent e); void windowDeiconified(WindowEvent e); void windowActivated(WindowEvent e); void windowDeactivated(WindowEvent e); }
  • 38. Programmazione concorrente e distribuita EVENT HANDLING  Adapter pattern  Class adapter  Object adapter 38Riccardo Cardin Target interface Source interface Adapt source interface to target
  • 39. Programmazione concorrente e distribuita EVENT HANDLING  What if you need to share the same behaviour in response to more than one event?  Use Action interface, that extends ActionListener  It encapsulates the description of the «command» and parameters that are necessary to carry out the command  Command pattern  AbstractAction is an adapter class provided by the JDK  Then simply add the action to your UI components using constructor 39Riccardo Cardin void actionPerformed(ActionEvent event) // Add a property to the action object indexed by key void putValue(String key, Object value) // Get a property indexed by key Object getValue(String key) new JButton(new MyAction());
  • 40. Programmazione concorrente e distribuita EVENT HANDLING Interface Method Params Generated by ActionListener actionPerformed ActionEvent • getActionCommand • getModifiers ActionButton JComboBox JTextField Timer AdjustmentListener adjustementValueChang ed AdjustementEvent • getAdjustable • getAdjustableType • getValue JScrollbar ItemListener itemStateChanged ItemEvent • getItem • getItemSelectable • getStateChange AbstractButton JComboBox FocusListener focusGained focusLost FocusEvent • isTemporary Component KeyListener keyPressed keyReleased keyTyped KeyEvent • getKeyChar • getKeyCode • getKeyModifiersText • getKeyText • isActionKey Component 40Riccardo Cardin
  • 41. Programmazione concorrente e distribuita EVENT HANDLING ...and so on 41Riccardo Cardin Interface Method Params Generated by MouseListener mousePressed mouseReleased mouseEntered mouseExited mouseClicked MouseEvent • getClickCount • getX • getY • getPoint • translatePoint Component MouseMotionListener mouseDragged mouseMoved MouseEvent Component MouseWheelListener mouseWheelMoved MouseWheelEvent • getWheelRotation • getScrollAmount Component WindowListener windowClosing windowOpened windowIconified windowDeiconified windowClosed windowActivated windowDeactivated WindowEvent • getWindow Window
  • 42. Programmazione concorrente e distribuita CONCLUSIONS 42Riccardo Cardin
  • 43. Programmazione concorrente e distribuita EXAMPLES 43Riccardo Cardin https://github.com/rcardin/pcd-snippets
  • 44. Programmazione concorrente e distribuita REFERENCES  Chap. 7 «Graphics Programming», Core Java Volume I - Fundamentals, Cay Horstmann, Gary Cornell, 2012, Prentice Hall  Chap. 8 «Event Handling», Core Java Volume I - Fundamentals, Cay Horstmann, Gary Cornell, 2012, Prentice Hall  Chap. 9 «User Interface Components with Swing», Core Java Volume I - Fundamentals, Cay Horstmann, Gary Cornell, 2012, Prentice Hall  How to Use FlowLayout https://docs.oracle.com/javase/tutorial/uiswing/layout/flow.html  How to Use CardLayout https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html  How to Use Actions https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html 44Riccardo Cardin