Java GUI with Swing (Part I) Java – How to Program By Deitel & Deitel and iswing/index.html

Slides:



Advertisements
Similar presentations
Introduction to Java Classes, events, GUI’s. Understand: How to use TextPad How to define a class or object How to create a GUI interface How event-driven.
Advertisements

1 Event Driven Programming with Graphical User Interfaces (GUIs) A Crash Course © Rick Mercer.
Chapter 7 Event-Driven Programming and Basic GUI Objects.
Creating a GUI with Swing. Introduction Very useful link: Swing – is a part of JFC (Java Foundation.
1 lecture 12Lecture 13 Event Handling (cont.) Overview  Handling Window Events.  Event Adapters Revisited.  Introduction to Components and Containers.
GUI and Event-Driven Programming Part 2. Event Handling An action involving a GUI object, such as clicking a button, is called an event. The mechanism.
PROGRAMMING REVIEW Lab 2 EECS 448 Dr Fengjun Li and Meenakshi Mishra.
1 Event Driven Programming wirh Graphical User Interfaces (GUIs) A Crash Course © Rick Mercer.
Object Oriented Programming Ders 11: Interfaces Mustafa Emre İlal
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 GUI CSCE 190 – Java Instructor: Joel Gompert Mon, July 26, 2004.
1 Event Driven Programs Rick Mercer. 2 So what happens next?  You can layout a real pretty GUI  You can click on buttons, enter text into a text field,
Introduction to Swing Components Chapter 14.  Part of the Java Foundation Classes (JFC)  Provides a rich set of GUI components  Used to create a Java.
Dale Roberts GUI Programming using Java - Event Handling Dale Roberts, Lecturer Computer Science, IUPUI Department of Computer.
Chapter 9: Visual Programming Basics Object-Oriented Program Development Using Java: A Class-Centered Approach.
GUIs in Java Swing, Events CS2110, SW Development Methods Readings: MSD, Chapter 12 Lab Exercise.
1 CSC111H Graphical User Interfaces (GUIs) Introduction GUIs in Java Understanding Events A Simple Application The Containment Hierarchy Layout Managers.
1 Outline 1 Introduction 2 Overview of Swing Components 3 JLabel 4 Event Handling 5 TextFields 6 How Event Handling Works 7 JButton 8 JCheckBox and JRadioButton.
Graphic User Interface. Graphic User Interface (GUI) Most of us interact with computers using GUIs. GUIs are visual representations of the actions you.
1 Graphical User Interfaces AWT and Swing packages Frames and Panels Components Nested Panels Images Reading for this Lecture: L&L, 3.9 – 3.11.
Copyright © 2002, Systems and Computer Engineering, Carleton University c-Gui3.ppt * Object-Oriented Software Development Part 18-c Building.
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.
Introduction to GUI Programming with Java Graphical User Interfaces With AWT and Swing Towson University *Ref:
1 / 67 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 14 Programming Fundamentals using Java 1.
Creating a GUI with JFC/Swing. What are the JFC and Swing? JFC –Java Foundation Classes –a group of features to help people build graphical user interfaces.
Swing / Session1 / 1 of 30 Module Introduction Distributed Computing in Java.
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.
Javax.swing Class JOptionPane Java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JOptionPane.
Graphical User Interfaces. Graphical input and output with JOptionPane.
GUI Basics. Agenda What GUI How to make in java Creating frames Frequently used GUI components Layout Managers.
Basics of GUI Programming Chapter 11 and Chapter 22.
Creating a Window. A basic window in Java is represented by an object of the class Window in the package java.awt.
Java Programming, Second Edition Chapter Thirteen Understanding Swing Components.
Sadegh Aliakbary Sharif University of Technology Fall 2011.
1 Event Driven Programs with a Graphical User Interface Rick Mercer.
Computer Science [3] Java Programming II - Laboratory Course Lab 4 -1 : Introduction to Graphical user interface GUI Components Faculty of Engineering.
Event-Driven Programming F Procedural programming is executed in procedural order. F In event-driven programming, code is executed upon activation of events.
Chapter 10 - Writing Graphical User Interfaces1 Chapter 10 Writing Graphical User Interfaces.
Swing GUI Components So far, we have written GUI applications which can ‘ draw ’. These applications are simple, yet typical of all Java GUI applications.
1 Chapter 13 – More GUI Components Introduction Graphical User Interface (GUI) –Gives program distinctive “look” and “feel” –Provides users with basic.
1 Lecture 8: User Interface Components with Swing.
Jozef Goetz Credits: Copyright  Pearson Education, Inc. All rights reserved. expanded by J. Goetz, 2016.
5-1 GUIs and Events Rick Mercer. 5-2 Event-Driven Programming with Graphical user Interfaces  Most applications have graphical user interfaces to respond.
Java Swing. Graphical User Interfaces (GUIs) GUI: An application that uses graphical objects to interact with users GUI applications consist of: – Events:
CIS 270—Application Development II Chapter 11—GUI Components: Part I.
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:
GUIs & Event-Driven Programming Chapter 11 Review.
Chapter 6 Building Java GUIs. MVC Model View Controller The model passes its data to the view for rendering The view determines which events are passed.
1 Event Driven Programming with Graphical User Interfaces (GUIs) A Crash Course © Rick Mercer.
©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.
GUI 1: JFC and Swing Basics OOP tirgul No
Java Swing What is swing? Swing is a ”Lightweight” GUI ToolKit for Java Different from AWT / SWT Toolkits for GUIs Few lines of code to produce GUI elements.
A Quick Java Swing Tutorial
GUI Programming using Java - Event Handling
Lecture 15 Basic GUI programming
GUIs and Events Rick Mercer.
CompSci 230 S Programming Techniques
JButton Chapter 11 Lecture 3.
Introduction to Graphics
A Quick Java Swing Tutorial
Ellen Walker Hiram College
MSIS670: Object-Oriented Software Engineering
IFS410: Advanced Analysis and Design
Introduction to Event Handling
COP 4610L: Applications in the Enterprise Spring 2005
A Quick Java Swing Tutorial
Advanced Programming in Java
Constructors, GUI’s(Using Swing) and ActionListner
Presentation transcript:

Java GUI with Swing (Part I) Java – How to Program By Deitel & Deitel and iswing/index.html iswing/index.html

Swing and AWT AWT (java.awt) and Swing (javax.swing) AWT gives same look and Swing allows for different look AWT is heavyweight and Swing is mostly lightweight

Top level container JApplet JDialog JFrame

To appear on screen, every GUI component must be part of a containment hierarchy. Each GUI component can be contained only once. Each top-level container has a content pane that contains (directly or indirectly) the visible components in that top-level container's GUI. You can optionally add a menu bar to a top-level container. The menu bar is by convention positioned within the top-level container, but outside the content pane.

Frame Menu Bar Content Pane with a yellow label

Top level containers java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame

java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Dialog javax.swing.JDialog

java.lang.Object java.awt.Component java.awt.Container java.awt.Panel java.applet.Applet javax.swing.JApplet

Swing Component hierarchy java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent

General purpose container JPanel JScrollPane JSplitPane JTabbedPane JToolBar

Special Purpose Container JInternalFrame JLayeredPane Root pane

Basic Controls JButton JCheckBox JComboBox JList JMenu JRadioButton

JSlider JSpinner JTextField JPasswordField

JColorChooser JEditorPaneJEditorPane and JTextPaneJTextPane

JFileChooser JTree

JTable

JTextArea

JLabel JProgressBar JSeparator JToolTip

How to Make Frames (Main Windows)

What is Frame? is a top-level window with a title and a border. The size of the frame includes any area designated for the border. Applications with a GUI typically use at least one frame.

Creating and Showing Frames import java.awt.*; import java.awt.event.*; import javax.swing.*; /* FrameDemo.java requires no other files. */ public class FrameDemo { ….. public static void main(String[] args) { //Create and set up the window. JFrame frame = new JFrame("FrameDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); … … //Display the window. frame.pack(); frame.setVisible(true); } … … }

The Frame API Creating and Setting Up a Frame Setting the Window Size and Location Methods Related to the Root Pane

Creating and Setting Up a Frame JFrame() JFrame(String) setVisible(bool) Create a frame that is initially invisible. The String argument provides a title for the frame. To make the frame visible, invoke setVisible(true) on it.

void setDefaultCloseOperation(int) int getDefaultCloseOperation() Set or get operation that occurs when the user pushes the close button on this frame. Possible choices are: DO_NOTHING_ON_CLOSE HIDE_ON_CLOSE DISPOSE_ON_CLOSE EXIT_ON_CLOSE

void setIconImage(Image) Image getIconImage() Set or get the icon that represents the frame. Note that the argument is a java.awt.Image object, not a javax.swing.ImageIcon (or any other javax.swing.Icon implementation). java.awt.Image

void setTitle(String) String getTitle() (in Frame) Set or get the frame's title.

Setting Window Size & Location void pack() void pack() (in Window) Size the window so that all its contents are at or above their preferred sizes.

void setSize(int, int) void setSize(Dimension) Dimension getSize() void setSize(int, int) void setSize(Dimension) Dimension getSize() (in Component) Set or get the total size of the window. The integer arguments to setSize specify the width and height, respectively.

void setBounds(int, int, int, int) void setBounds(Rectangle) Rectangle getBounds() void setBounds(int, int, int, int) void setBounds(Rectangle) Rectangle getBounds() (in Component) Set or get the size and position of the window. For the integer version of setBounds, the window's upper left corner is at the x, y location specified by the first two arguments, and has the width and height specified by the last two arguments.

void setLocation(int, int) Point getLocation() void setLocation(int, int) Point getLocation() (in Component) Set or get the location of the upper left corner of the window. The parameters are the x and y values, respectively.

void setLocationRelativeTo(C omponent) void setLocationRelativeTo(C omponent) (in Window) Position the window so that it's centered over the specified component. If the argument is null, the window is centered onscreen. To properly center the window, you should invoke this method after the window's size has been set.

How to Use Buttons, Check Boxes, and Radio Buttons

java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent java.awt.Container javax.swing.JComponent javax.swing.AbstractButton

Class Summary JButtonJButtonA common button. JCheckBoxJCheckBoxA check box button. JRadioButtonJRadioButtonOne of a group of radio buttons. JMenuItemJMenuItemAn item in a menu. JCheckBoxMenuItemJCheckBoxMenuItemA menu item that has a check box. JRadioButtonMenuItemJRadioButtonMenuItemA menu item that has a radio button. JToggleButtonJToggleButtonImplements toggle functionality inherited by JCheckBox and JRadioButton.

Basic Controls JButton JCheckBox JComboBox JList JMenu JRadioButton

How to use common button

import javax.swing.AbstractButton; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.ImageIcon; /* * ButtonDemo.java requires the following files: * images/right.gif * images/middle.gif * images/left.gif */ public class ButtonDemo extends JPanel { protected JButton b1, b2, b3;

public ButtonDemo() { ImageIcon leftButtonIcon = createImageIcon("images/right.gif"); ImageIcon middleButtonIcon = createImageIcon("images/middle.gif"); ImageIcon rightButtonIcon = createImageIcon("images/left.gif"); b1 = new JButton("Disable middle button", leftButtonIcon); b1.setVerticalTextPosition(AbstractButton.CENTER); b1.setHorizontalTextPosition(AbstractButton.LEADING); //aka LEFT, for left-to-right locales b2 = new JButton("Middle button", middleButtonIcon); b2.setVerticalTextPosition(AbstractButton.BOTTOM); b2.setHorizontalTextPosition(AbstractButton.CENTER); b3 = new JButton("Enable middle button", rightButtonIcon); b3.setVerticalTextPosition(AbstractButton.CENTER); b3.setHorizontalTextPosition(AbstractButton.TRAILING); b3.setEnabled(false); // disable button b1.setToolTipText("Click this button to disable the middle button."); b2.setToolTipText("This middle button does nothing when you click it."); b3.setToolTipText("Click this button to enable the middle button."); //Add Components to this container, using the default FlowLayout. add(b1); add(b2); add(b3); }

/** Returns an ImageIcon, or null if the path was invalid. */ protected static ImageIcon createImageIcon(String path) { java.net.URL imgURL = ButtonDemo.class.getResource(path); if (imgURL != null) { return new ImageIcon(imgURL); } else { System.err.println("Couldn't find file: " + path); return null; }

import javax.swing.JFrame; public class ButtonDemoTest{ public static void main(String args[]){ //Create and set up the window. JFrame frame = new JFrame("TopLevelDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Create and set up the content pane. ButtonDemo newContentPane = new ButtonDemo(); newContentPane.setOpaque(true); //content panes must be opaque frame.setContentPane(newContentPane); //Display the window. frame.pack(); frame.setVisible(true); }

Introduction to Event Handling

《 interface 》 Subject registerObserver() removeObserver() notifyObserver() 《 interface 》 Observer update() ConcreteSubject registerObserver(){…} removeObserver(){…} notifyObserver(){…} getState() setState() ConcreteObserver update(){…} // other methods

Java Event Handling Example Name in Design Pattern Actual Name in JButton Event Handling SubjectJButton ObserverActionListener ConcreteObserverThe class that implements ActionListener interface Attach()addActionListener Notify()actionPerformed

Basic concepts Event –When users interact with a GUI component, the interaction is called event –Events drive the program to perform a task Event source –the GUI component on which the event occurs Event handler (listener) –The code that performs a task in response to an event Event set up –The process of creating event handler class/object and registering the handler with event source Event handling –The overall process of setting up event handling and responding to events

Event handling process Event set up –Programmer write code to implement the event handler and register the event handler with a GUI component Event handling –Java VM and GUI component works together responding to events

Set up Event Handling 1.Create an event handler (listener) class -The event handler class implements an appropriate event-listener interface. 2. Create an object of the above event handler class 3. Registering the event handler object with the event source (GUI component) –i.e., when event occurs, a registered object of the event handler class will be notified.

GUI object (plainJButton=new JButton();) Event Type (ActionEvent) Event handler Interface ( ActionListener ) Event handler class Event handler object Class ButtonHandler implements ActionListener{ …. Public void actionPerformed(…){ } …. } handler = new ButtonHandler(); plainJButton.addActionListener (handler); Add handler object to the event listener list of GUI object listenerList

Event Handling (delegation event model) 1.When an event occurs, Java VM sent event object to GUI component 2.The event object contains - event source, event type, and event id, etc 3. When GUI component receives event object –Identify the registered handler based on event type –Identify the specific method for the registered handler based on event id –Call the specific method to handle the event

Event Types & Listener Interfaces Many different types of events They are specified in java.awt.event Event types specific to Swing are specified in javax.swing.event For each event type, there is one or more corresponding event-listener interface For each listener interface, there is one or more event handling methods.

Action Event and Action Listener You implement an action listener to define what should be done when an user performs certain operation. An action event occurs, whenever an action is performed by the user. - clicks a button,button - chooses a menu item,menu item - presses Enter in a text field.text field When an action event occurs, JMV sends an ActionEvent class object to event source.

ActionEvent Class String getActionCommand() Returns the string associated with this action. Most objects that can fire action events support a method called setActionCommand that lets you set this string. int getModifiers() Returns an integer representing the modifier keys the user was pressing when the action event occurred. You can use the ActionEvent-defined constants SHIFT_MASK, CTRL_MASK, META_MASK, and ALT_MASK to determine which keys were pressed. For example, if the user Shift-selects a menu item, then the following expression is nonzero: actionEvent.getModifiers() & ActionEvent.SHIFT_MASK Object getSource() Object getSource() (in java.util.EventObject) Returns the object that fires the event.

ActionListener Interface public void actionPerformed(ActionEvent e) {... //code that reacts to the action... }

Write an Action Listener: Declare an event handler class –class either implements an ActionListener interface or –extends a class that implements an ActionListener interface. public class MyClass implements ActionListener { … public void actionPerformed(ActionEvent e) {... //code that reacts to the action... } Register an instance of the event handler class on one or more components. someComponent.addActionListener(instanceOfMyClass);

Event handling with Nested Classes

// Fig. 11.9: TextFieldFrame.java // Demonstrating the JTextField class. import java.awt.FlowLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JPasswordField; import javax.swing.JOptionPane; public class TextFieldFrame extends JFrame { private JTextField textField1; // text field with set size private JTextField textField2; // text field constructed with text private JTextField textField3; // text field with text and size private JPasswordField passwordField; // password field with text

// TextFieldFrame constructor adds JTextFields to JFrame public TextFieldFrame() { super( "Testing JTextField and JPasswordField" ); setLayout( new FlowLayout() ); // set frame layout // construct textfield with 10 columns textField1 = new JTextField( 10 ); add( textField1 ); // add textField1 to JFrame // construct textfield with default text textField2 = new JTextField( "Enter text here" ); add( textField2 ); // add textField2 to JFrame // construct textfield with default text and 21 columns textField3 = new JTextField( "Uneditable text field", 21 ); textField3.setEditable( false ); // disable editing add( textField3 ); // add textField3 to JFrame // construct passwordfield with default text passwordField = new JPasswordField( "Hidden text" ); add(passwordField ); // add passwordField to JFrame

// create and register event handlers TextFieldHandler handler = new TextFieldHandler(); // create and register event handlers textField1.addActionListener( handler ); textField2.addActionListener( handler ); textField3.addActionListener( handler ); passwordField.addActionListener( handler ); } // end TextFieldFrame constructor

// private inner class for event handling private class TextFieldHandler implements ActionListener { // process textfield events public void actionPerformed( ActionEvent event ) { String string = ""; // declare string to display // user pressed Enter in JTextField textField1 if ( event.getSource() == textField1 ) string = String.format( "textField1: %s", event.getActionCommand() ); // user pressed Enter in JTextField textField2 else if ( event.getSource() == textField2 ) string = String.format( "textField2: %s", event.getActionCommand() ); // user pressed Enter in JTextField textField3 else if ( event.getSource() == textField3 ) string = String.format( "textField3: %s", event.getActionCommand() ); // user pressed Enter in JTextField passwordField else if ( event.getSource() == passwordField ) string = String.format( "passwordField: %s", new String( passwordField.getPassword() ) ); // display JTextField content JOptionPane.showMessageDialog( null, string ); } // end method actionPerformed } // end private inner class TextFieldHandler

} // end class TextFieldFrame // Fig : TextFieldTest.java // Testing TextFieldFrame. import javax.swing.JFrame; public class TextFieldTest { public static void main( String args[] ) { TextFieldFrame textFieldFrame = new TextFieldFrame(); textFieldFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); textFieldFrame.setSize( 325, 100 ); // set frame size textFieldFrame.setVisible( true ); // display frame } // end main } // end class TextFieldTest

Event handling with Anonymous Inner Class

public class ButtonFrame extends JFrame { private JButton plainJButton; // button with just text // ButtonFrame adds JButtons to JFrame public ButtonFrame() { super( "Testing Buttons" ); setLayout( new FlowLayout() ); // set frame layout plainJButton = new JButton( "Plain Button" ); // button with text add( plainJButton ); // add plainJButton to JFrame // create new ButtonHandler for button event handling ButtonHandler handler = new ButtonHandler(); plainJButton.addActionListener( handler ); } // end ButtonFrame constructor // inner class for button event handling private class ButtonHandler implements ActionListener { // handle button event public void actionPerformed( ActionEvent event ) { JOptionPane.showMessageDialog( ButtonFrame.this, String.format( "You pressed: %s", event.getActionCommand() ) ); } // end method actionPerformed } // end private inner class ButtonHandler } // end class ButtonFrame

public class ButtonFrame extends JFrame { private JButton plainJButton; // button with just text // ButtonFrame adds JButtons to JFrame public ButtonFrame() { super( "Testing Buttons" ); setLayout( new FlowLayout() ); // set frame layout plainJButton = new JButton( "Plain Button" ); // button with text add( plainJButton ); // add plainJButton to JFrame //Use anonymous inner class plainJButton.addActionListener( new ActionListener () // anonymous inner class { // handle button event public void actionPerformed( ActionEvent event ) { JOptionPane.showMessageDialog( ButtonFrame.this, String.format("You pressed: %s", event.getActionCommand() ) ); } // end method actionPerformed } // end of anonymous inner class ); // end of add } // end ButtonFrame constructor } // end class ButtonFrame