COS 260 DAY 23 Tony Gauvin.

Slides:



Advertisements
Similar presentations
Introduction to Java 2 Programming
Advertisements

Graphical User Interfaces (Part IV)
CS18000: Problem Solving and Object-Oriented Programming.
Graphic User Interfaces Layout Managers Event Handling.
Fall 2007CS 225 Graphical User Interfaces Event Handling Appendix C.
Java Swing Recitation – 11/(20,21)/2008 CS 180 Department of Computer Science, Purdue University.
Chapter 6 Graphical User Interface (GUI) and Object-Oriented Design (OOD)
Events ● Anything that happens in a GUI is an event. For example: – User clicks a button, presses return when typing text, or chooses a menu item ( ActionEvent.
GUI’s and eventhandlers in java Martin Jagersand.
CPSC150 Week 12 Graphical User Interfaces Chapter 11.
1 GUI Elements in Java Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Building Graphical User Interfaces Overview Constructing GUIs Interface components GUI layout Event handling Objects First with Java - A Practical.
Scott Grissom, copyright 2006Ch 11: GUI Slide 1 Graphical User Interfaces (Ch 11) Careful design of a graphical user interface is key to a viable software.
CPSC150 JavaLynn Lambert CPSC150 Week 12 InheritanceInterfaces.
CPSC150 Week 12 Graphical User Interfaces Chapter 11.
CC1007NI: Further Programming Week 5 Dhruba Sen Module Leader (Islington College)
Java Programming: From Problem Analysis to Program Design, Second Edition1  Learn about basic GUI components.  Explore how the GUI components JFrame,
Graphical User Interface CSI 1101 N. El Kadri. Plan - agenda Graphical components Model-View-Controller Observer/Observable.
MIT AITI 2003 Lecture 17. Swing - Part II. The Java Event Model Up until now, we have focused on GUI's to present information (with one exception) Up.
Java Programming: Advanced Topics 1 Common Elements of Graphical User Interfaces Chapter 6.
 2002 Prentice Hall, Inc. All rights reserved Introduction Graphical User Interface (GUI) –Gives program distinctive “look” and “feel” –Provides.
Graphic User Interface. Graphic User Interface (GUI) Most of us interact with computers using GUIs. GUIs are visual representations of the actions you.
FEN IntroJava2006 AAU1 GUI: Graphical User Interface AWT/SWING: Components Drag and Drop in NetBeans Events Listeners.
GUI Clients 1 Enterprise Applications CE00465-M Clients with Graphical User Interfaces.
MSc Workshop - © S. Kamin, U. ReddyLect 3 - GUI -1 Lecture 3 - Graphical User Interfaces r GUI toolkits in Java API r JFrame r GUI components.
Timer class and inner classes. Processing timer events Timer is part of javax.swing helps manage activity over time Use it to set up a timer to generate.
Object-Oriented Program Development Using Java: A Class-Centered Approach, Enhanced Edition.
OOP (Java): GUI Intro/ OOP Objectives – –use an image viewer application to introduce Java's GUI features Semester 2,
Programming with Java’s Swing API February 4, 2003 CMPS Advanced Programming Graphical User Interfaces.
CS1054: Lecture 21 - Graphical User Interface. Graphical User Interfaces vs. Text User Interface.
Java GUI. Graphical User Interface (GUI) a list a button a text field a label combo box checkbox.
Introduction to GUI in 1 Graphical User Interface 2 Nouf Almunyif.
Ch13 Creating windows and applets. Short overview AWT (Abstract Windowing Toolkit) Early Java development used graphic classesEarly Java development used.
Objects First With Java A Practical Introduction Using BlueJ Building Graphical User Interfaces 2.0.
Building Graphical User Interfaces Overview Constructing GUIs Interface components GUI layout Event handling Objects First with Java - A Practical.
Ajmer Singh PGT(IP) JAVA IDE Programming - I. Ajmer Singh PGT(IP) GUI (Graphical User Interface) It is an interface that uses a graphic entities along.
Sadegh Aliakbary Sharif University of Technology Fall 2011.
1 COS 260 DAY 24 Tony Gauvin. 2 Agenda Questions? 10 th Mini Quiz Corrected –So-so results Capstone progress report over due Course evaluations Assignment.
JAVA: An Introduction to Problem Solving & Programming, 6 th Ed. By Walter Savitch ISBN © 2012 Pearson Education, Inc., Upper Saddle River,
Chapter 10 - Writing Graphical User Interfaces1 Chapter 10 Writing Graphical User Interfaces.
Lesson 28: More on the GUI button, frame and actions.
Objects First With Java A Practical Introduction Using BlueJ Building Graphical User Interfaces (GUIs) Week
5-1 GUIs and Events Rick Mercer. 5-2 Event-Driven Programming with Graphical user Interfaces  Most applications have graphical user interfaces to respond.
1 A Quick Java Swing Tutorial. 2 Introduction Swing – A set of GUI classes –Part of the Java's standard library –Much better than the previous library:
Building Graphical User Interfaces Overview Constructing GUIs Interface components GUI layout Event handling © 2017 Pearson Education, Inc. Hoboken,
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter Chapter 7 ( Book Chapter 14) GUI and Event-Driven Programming.
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 Event-Driven Programming and Basic GUI Objects.
A Quick Java Swing Tutorial
GUIs and Events Rick Mercer.
CSC 205 Programming II Lecture 5 AWT - I.
A First Look at GUI Applications
A Quick Java Swing Tutorial
Building Graphical User Interfaces
COS 260 DAY 23 Tony Gauvin.
Ellen Walker Hiram College
Timer class and inner classes
COS 260 DAY 23 Tony Gauvin.
COS 260 DAY 10 Tony Gauvin.
COS 260 DAY 2 Tony Gauvin.
COS 260 DAY 18 Tony Gauvin.
Graphical User Interface
1 Graphical User Interfaces
A Quick Java Swing Tutorial
COS 260 DAY 11 Tony Gauvin.
Advanced Programming in Java
COS 260 DAY 23 Tony Gauvin.
COS 260 DAY 23 Tony Gauvin.
Graphical User Interface
TA: Nouf Al-Harbi NoufNaief.net :::
TA: Nouf Al-Harbi NoufNaief.net :::
Presentation transcript:

COS 260 DAY 23 Tony Gauvin

Agenda Mini Quiz 10 on Friday Assignment 5 corrected Questions? Assignment 5 corrected Good results Assignment 6 partially corrected Assignment 7 posted Due Dec 1 Mini Quiz 10 on Friday Chapter 12 Capstone progress report 2 Over Due Building Graphical User Interfaces

Capstone Project Capstone Project Description Fall 2017.pdf October 2 Proposal Due E-mailed to Tony in Blackboard October 27 Progress Report E-mailed to Tony in Blackboard November 17 Progress Report E-mailed to Tony in Blackboard November 30 Progress Report E-mailed to Tony in Blackboard December 12@8AM All Deliverables & Presentation Due Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Final CountDown Nov 28 Dec 1 Dec 5 Dec 8 Dec 12 Gui’s Gui’s Continued Assignment 7 Due Miniquiz 10 Dec 5 Handling errors Dec 8 Min quiz 11 Dec 12 Assignment 8 due Capstone Projects and presentation Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Building Graphical User Interfaces Objects First with Java Building Graphical User Interfaces Replace this with your course title and your name/contact details. 6.0 © David J. Barnes and Michael Kölling

Overview Constructing GUIs Interface components GUI layout Event handling © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

GUI Principles Components: GUI building blocks. Buttons, menus, sliders, etc. Layout: arranging components to form a usable GUI. Using layout managers. Events: reacting to user input. Button presses, menu selections, etc. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

AWT and Swing © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Elements of a frame imageviewer 1-0 Window controls Title Menu bar Content pane © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Swing vs AWT AWT (abstract window toolkit) part of original Java API SWING is built on the awt and added richer components Swing components start with the letter J http://web.mit.edu/6.005/www/sp14/psets/ps4/java-6-tutorial/components.html Both wing and AWT will be replaced by JavaFX Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Creating a frame import java.awt.*; import java.awt.event.*; import javax.swing.*;    public class ImageViewer { private JFrame frame; /** * Create an ImageViewer show it on screen. */ public ImageViewer() makeFrame(); } // rest of class omitted. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

The content pane Imageviewer 0-1 Ex 13-1 /** * Create the Swing frame and its content. */ private void makeFrame() { frame = new JFrame("ImageViewer"); Container contentPane = frame.getContentPane(); JLabel label = new JLabel("I am a label."); contentPane.add(label);   frame.pack(); frame.setVisible(true); } Imageviewer 0-1 Ex 13-1 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Play Time Ex 13-3 Add button Ex 13.4 Add second button or second label Alternative Structure imageviwer0-1 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Adding menus JMenuBar JMenu JMenuItem Displayed below the title. Contains the menus. JMenu e.g. File. Contains the menu items. JMenuItem e.g. Open. Individual items. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

private void makeMenuBar(JFrame frame) { JMenuBar menubar = new JMenuBar(); frame.setJMenuBar(menubar); // create the File menu JMenu fileMenu = new JMenu("File"); menubar.add(fileMenu); JMenuItem openItem = new JMenuItem("Open"); fileMenu.add(openItem); JMenuItem quitItem = new JMenuItem("Quit"); fileMenu.add(quitItem); } EX 13.5 & 13.6 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Event handling Events correspond to user interactions with components. Components are associated with different event types. Frames are associated with WindowEvent. Menus are associated with ActionEvent. Mouse actions are associated with MouseEvent Objects can be notified when an event occurs. Such objects are called listeners. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Centralized event receipt A single object handles all events. Implements the ActionListener interface. Defines an actionPerformed method. It registers as a listener with each component. item.addActionListener(this) It has to work out which component has dispatched the event. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

ActionListener public interface ActionListener { /** * Invoked when an action occurs. * @param ev Details of the event. */ public void actionPerformed(ActionEvent ev); } https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionListener.html © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

public class ImageViewer implements ActionListener { … public void actionPerformed(ActionEvent e) String command = e.getActionCommand(); if(command.equals("Open")) { } else if (command.equals("Quit")) { private void makeMenuBar(Jframe frame) openItem.addActionListener(this); } imageviewer0-2 ex 13-8,13.9, 13.10 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Centralized event handling The approach works. It is used, so you should be aware of it. However … It does not scale well. Identifying components by their text is fragile. An alternative approach is preferred. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Lambdas as event handlers Review earlier material if necessary: Chapter 5 introduces lambdas. Chapter 12 introduces functional interfaces. Many event handler interfaces consist of a single abstract method. They are functional interfaces. Suited to implementation as lambdas. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Lambda for ActionListener JMenuItem openItem = new JMenuItem("Open"); ... openItem.addActionListener( (ActionEvent ev) -> { openFile(); } ); General form item.addActionListener(ev -> { actions }); Imageviewer0-3 13-12, 13-13 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

The imageviewer project 0-4 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Image processing imageviewer 1-0 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Class responsibilities ImageViewer Sets up the GUI structure. ImageFileManager Static methods for image file loading and saving. ImagePanel Displays the image within the GUI. OFImage Models a 2D image. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

OFImage Our subclass of BufferedImage. Represents a 2D array of pixels. Important methods: getPixel, setPixel getWidth, getHeight (from super class) Each pixel has a color. We use java.awt.Color. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Adding an ImagePanel public class ImageViewer { private JFrame frame; private ImagePanel imagePanel; … private void makeFrame() Container contentPane = frame.getContentPane(); imagePanel = new ImagePanel(); contentPane.add(imagePanel); } © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Loading an image public class ImageViewer { private JFrame frame; private ImagePanel imagePanel; … private void openFile() File selectedFile = …; OFImage image = ImageFileManager.loadImage(selectedFile); imagePanel.setImage(image); frame.pack(); } } ex 13.4-13.5 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Layout managers Manage limited space for competing components. FlowLayout, BorderLayout, GridLayout, BoxLayout, GridBagLayout. Manage Container objects, e.g. a content pane. Each imposes its own style. https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

FlowLayout © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

BorderLayout © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

GridLayout © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

BoxLayout Note: no component resizing. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Nested containers Sophisticated layouts can be obtained by nesting containers. Use JPanel as a basic container. Each container will have its own layout manager. Often preferable to using a GridBagLayout. https://docs.oracle.com/javase/tutorial/uiswing/layout/index.html © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Struts and Glue Invisible components used as spacing. Available from the Box class. https://docs.oracle.com/javase/8/docs/api/javax/swing/Box.html Strut: fixed size. Component createHorizontalStrut(int width) Component createVerticalStrut(int height) Glue: fills available space. Component createHorizontalGlue() Component createVerticalGlue() © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Dialogs Modal dialogs block all other interaction. Forces a response from the user. Non-modal dialogs allow other interaction. This is sometimes desirable. May be difficult to avoid inconsistencies. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

JOptionPane standard dialogs Message dialog Message text plus an OK button. Confirm dialog Yes, No, Cancel options. Input dialog Message text and an input field. Variations are possible. https://docs.oracle.com/javase/8/docs/api/javax/swing/JOptionPane.html https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

A message dialog private void showAbout() { JOptionPane.showMessageDialog(frame, "ImageViewer\n" + VERSION, "About ImageViewer", JOptionPane.INFORMATION_MESSAGE); } © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Image filters Functions applied to the whole image. int height = getHeight(); int width = getWidth(); for(int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { Color pixel = getPixel(x, y); alter the pixel's color value; setPixel(x, y, pixel); } © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Adding further filters private void makeLighter() { if(currentImage != null) { currentImage.lighter(); frame.repaint(); showStatus("Applied: lighter"); } else { showStatus("No image loaded."); Code duplication? Refactor! private void threshold() { if(currentImage != null) { currentImage.threshold(); frame.repaint(); showStatus("Applied: threshold"); } else { showStatus("No image loaded."); © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Adding further filters Define a Filter superclass (abstract). Create function-specific subclasses. Create a collection of subclass instances in ImageViewer. Define a generic applyFilter method. See imageviewer2-0. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

imageviewer2-0 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Buttons and nested layouts A GridLayout inside a FlowLayout inside a BorderLayout. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Borders Used to add decoration around components. Defined in javax.swing.border BevelBorder, CompoundBorder, EmptyBorder, EtchedBorder, TitledBorder. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Adding spacing JPanel contentPane = (JPanel)frame.getContentPane(); contentPane.setBorder(new EmptyBorder(6, 6, 6, 6));   // Specify the layout manager with nice spacing contentPane.setLayout(new BorderLayout(6, 6)); imagePanel = new ImagePanel(); imagePanel.setBorder(new EtchedBorder()); contentPane.add(imagePanel, BorderLayout.CENTER); © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Other components Slider Spinner Tabbed pane Scroll pane © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Nested class syntax Class definitions may be nested. public class Enclosing { … private class Inner { … } } © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Inner classes Instances of the inner class are localized within the enclosing class. Instances of the inner class have access to the private members of the enclosing class. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Anonymous inner classes Obey the rules of inner classes. Used to create one-off objects for which a class name is not required. Use a special syntax. The instance is always referenced via its supertype, as it has no subtype name. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Anonymous action listener JMenuItem openItem = new JMenuItem("Open"); openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openFile(); } }); Compare with the lambda version © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Anonymous class elements Anonymous object creation openItem.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) openFile(); } ); Class definition Actual parameter © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Exit on window close frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); WindowAdapter provides a no-op implementation of the WindowListener interface. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Review Aim for cohesive application structures. Endeavor to keep GUI elements separate from application functionality. Pre-defined components simplify creation of sophisticated GUIs. Layout managers handle component juxtaposition. Nest containers for further control. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

Review Many components recognize user interactions with them. Reactive components deliver events to listeners. Lambdas are commonly used to implement listeners. Anonymous inner classes are used where lambdas are not possible. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.