• A GUI (graphical user interface) is a windowing system that  interacts with the user

32  Download (0)

Full text

(1)

Chapter 17

Swing I

Introduction to Swing Introduction to Swing

A GUI ( hi l i t f ) i i d i t th t

A GUI (graphical user interface) is a windowing system that  interacts with the user

The Java AWT (Abstract Window Toolkit) package is the  ( ) p g original Java package for creating GUIs

• The Swing package is an improved version of the AWT

– However it does not completely replace the AWT – However, it does not completely replace the AWT

– Some AWT classes are replaced by Swing classes, but other AWT  classes are needed when using Swing

• Swing GUIs are designed using a form of object oriented

• Swing GUIs are designed using a form of object‐oriented  programming known as event‐driven programming

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 17‐2

Events Events

E d i i i i l

Event‐driven programming is a programming style  that uses a signal‐and‐response approach to  programming

programming

An event is an object that acts as a signal to another  object know as a listener

object know as a listener

The sending of an event is called firing the event

Th bj t th t fi th t i ft GUI t

– The object that fires the event is often a GUI component,  such as a button that has been clicked

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 17‐3

Listeners Listeners

• A listener object performs some action in  response to the event p

– A given component may have any number of  listeners

listeners

– Each listener may respond to a different kind of  event or multiple listeners might may respond to event, or multiple listeners might may respond to  the same events

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 17‐4

(2)

Exception Objects Exception Objects

• An exception object is an event

– The throwing of an exception is an example of  g p p firing an event

• The listener for an exception object is the

• The listener for an exception object is the  catch block that catches the event

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 17‐5

Event Handlers Event Handlers

• A listener object has methods that specify  what will happen when events of various  pp kinds are received by it

These methods are called event handlersThese methods are called event handlers

• The programmer using the listener object will  define or redefine these event‐handler 

methods

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 17‐6

Event Firing and an Event Listener

Event Firing and an Event Listener Event Driven Programming Event‐Driven Programming

• Event‐driven programming is very different from  most programming seen up until now

– So far, programs have consisted of a list of statements  executed in order

– When that order changed, whether or not to perform 

certain actions (such as repeat statements in a loop, 

branch to another statement or invoke a method) was

branch to another statement, or invoke a method) was 

controlled by the logic of the program

(3)

Event Driven Programming Event‐Driven Programming

d i i bj

• In event‐driven programming, objects are  created that can fire events, and listener  objects are created that can react to the  events

• The program itself no longer determines the  order in which things can happen g pp

– Instead, the events determine the order

Copyright © 2012 Pearson Addison‐Wesley. All rights reserved. 17‐9

Event Driven Programming Event‐Driven Programming

• In an event‐driven program, the next thing that  happens depends on the event that occurs

In particular, methods are defined that will never be  explicitly invoked in any program

– Instead, methods are invoked automatically when an event  signals that the method needs to be called

17‐10 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Simple Window A Simple Window

A i l i d i t f bj t f th JF l

• A simple window can consist of an object of the JFrame class

– A JFrame object includes a border and the usual three buttons for  minimizing, changing the size of, and closing the window

Th l i f d i h j i k

– The  JFrame class is found in the  javax.swing package JFrame firstWindow = new JFrame();

• A JFrame can have components added to it, such as buttons,  p , , menus, and text labels

– These components can be programmed for action firstWindow.add(endButton); ( );

– It can be made visible using the setVisible method firstWindow.setVisible(true);

17‐11 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A First Swing Demonstration (Part 1 of 4) A First Swing Demonstration (Part 1 of 4)

17‐12 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(4)

A First Swing Demonstration (Part 2 of 4) A First Swing Demonstration (Part 2 of 4)

17‐13 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A First Swing Demonstration (Part 3 of 4) A First Swing Demonstration (Part 3 of 4)

17‐14 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A First Swing Demonstration (Part 4 of 4)

A First Swing Demonstration (Part 4 of 4) Some Methods in the Class JFrame (Part 1 of 

3)

(5)

Some Methods in the Class JFrame (Part 2 of  3)

17‐17 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Some Methods in the Class JFrame (Part 3 of  3)

17‐18 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Pixels and the Relationship between Resolution  and Size

A pixel is the smallest unit of space on a screen

– Both the size and position of Swing objects are measured in  pixels

– The more pixels on a screen, the greater the screen resolution

• A high‐resolution screen of fixed size has many pixels

– Therefore each one is very small Therefore, each one is very small

• A low‐resolution screen of fixed size has fewer pixels

– Therefore, each one is much larger

• Therefore, a two‐pixel figure on a low‐resolution screen  will look larger than a two‐pixel figure on a high‐

resolution screen 

17‐19 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Pitfall:  Forgetting to Program the  Close‐Window Button

• The following lines from the FirstSwingDemo program ensure that when the user clicks the close‐

window button, nothing happens g pp

firstWindow.setDefaultCloseOperation(

JFrame.DO_NOTHING_ON_CLOSE);

• If this were not set the default action would be

• If this were not set, the default action would be  JFrame.HIDE_ON_CLOSE

– This would make the window invisible and inaccessible, but  would not end the program

would not end the program

– Therefore, given this scenario, there would be no way to click  the "Click to end program" button

• Note that the close window and other two

• Note that the close‐window and other two 

accompanying buttons are part of the JFrame object,  and not separate buttons

17‐20 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(6)

Buttons Buttons

A button object is created from the class  JButton and can be added to a JFrame

– The argument to the JButton constructor is the string  that appears on the button when it is displayed

d

JButton endButton = new

JButton("Click to end program.");

firstWindow add(endButton);

firstWindow.add(endButton);

17‐21 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Action Listeners and Action Events Action Listeners and Action Events

Cli ki b tt fi t

• Clicking a button fires an event

• The event object is "sent" to another object called a listener

– This means that a method in the listener object is invoked  j automatically

– Furthermore, it is invoked with the event object as its argument

• In order to set up this relationship, a GUI program must do In order to set up this relationship, a GUI program must do  two things

1. It must specify, for each button, what objects are its listeners, i.e., it  must register the listeners

must register the listeners

2. It must define the methods that will be invoked automatically when  the event is sent to the listener

17‐22 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Action Listeners and Action Events Action Listeners and Action Events

EndingListener buttonEar = new

EndingListener());

endButton.addActionListener(buttonEar);

• Above, a listener object named buttonEar is  created and registered as a listener for the button  named  endButton

Note that a button fires events known as action events,  which are handled by listeners known as action listeners

Action Listeners and Action Events Action Listeners and Action Events

• Different kinds of components require different kinds  of listener classes to handle the events they fire

• An action listener is an object whose class  implements the ActionListener interface

– The ActionListener interface has one method  heading that must be implemented

public void actionPerformed(ActionEvent e)

(7)

Action Listeners and Action Events Action Listeners and Action Events

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

• The EndingListener class defines its  actionPerformed method as above actionPerformed method as above

– When the user clicks the endButton, an action event is sent  to the action listener for that button

– The The EndingListener EndingListener object object buttonEar buttonEar is the action is the action  listener for endButton

– The action listener buttonEar receives the action event as  the parameter e p to its actionPerformed method, which is  , automatically invoked

– Note that  e must be received, even if it is not used

17‐25 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Pitfall:  Changing the Heading for  actionPerformed

Wh th ti P f d th d i i l t d i

• When the actionPerformed method is implemented in  an action listener, its header must be the one specified in the  ActionListener interface

– It is already determined, and may not be changed – Not even a throws clause may be added

bli id ti P f d(A ti E t ) public void actionPerformed(ActionEvent e)

• The only thing that can be changed is the name of the  parameter, since it is just a placeholder

parameter, since it is just a placeholder

– Whether it is called  e or something else does not matter, as long as it  is used consistently within the body of the method

17‐26 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Tip: Ending a Swing Program Tip:  Ending a Swing Program

GUI f b d ki d f i fi i l

• GUI programs are often based on a kind of infinite loop

– The windowing system normally stays on the screen until the user  indicates that it should go away

• If the user never asks the windowing system to go away, it will  never go away

d d b d

• In order to end a GUI program, System.exit must be used  when the user asks to end the program

– It must be explicitly invoked or included in some library code that is It must be explicitly invoked, or included in some library code that is  executed

– Otherwise, a Swing program will not end after it has executed all the  code in the program

code in the program

17‐27 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Better Version of Our First Swing GUI A Better Version of Our First Swing GUI

• A better version of FirstWindow makes it a derived  class of the class JFrame

– This is the normal way to define a windowing interface y g

• The constructor in the new FirstWindow class starts  by calling the constructor for the parent class using  super();

super();

– This ensures that any initialization that is normally done for all  objects of type JFrame will be done

• Almost all initialization for the window FirstWindow

• Almost all initialization for the window FirstWindow is placed in the constructor for the class

• Note that this time, an anonymous object is used as the  action listener for the endButton

17‐28 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(8)

The Normal Way to Define a JFrame (Part 1 of  4)

17‐29 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Normal Way to Define a JFrame (Part 2 of  4)

17‐30 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Normal Way to Define a JFrame (Part 3 of  4)

The Normal Way to Define a JFrame (Part 4 of 

4)

(9)

Labels Labels

A label is an object of the class  JLabel

– Text can be added to a JFrame using a label

– The text for the label is given as an argument when the  JLabel is created

– The label can then be added to a JFrame

JLabel greeting = new JLabel("Hello");

dd( ti ) add(greeting);

17‐33 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Color Color

I J l i bj t f th l C l

In Java, a color is an object of the class Color

– The class  Color is found in the  java.awt package

– There are constants in the Color class that represent a number of 

b i l

basic colors

• A JFrame can not be colored directly 

Instead, a program must color something called the content pane of  , p g g p the JFrame

– Since the content pane is the "inside" of a JFrame, coloring the  content pane has the effect of coloring the inside of the JFrame – Therefore, the background color of a  JFrame can be set using the 

following code:

getContentPane().setBackground(Color);

17‐34 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Color Constants The Color Constants

17‐35 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A JFrame with Color (Part 1 of 4) A JFrame with Color (Part 1 of 4)

17‐36 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(10)

A JFrame with Color (Part 2 of 4) A JFrame with Color (Part 2 of 4)

17‐37 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A JFrame with Color (Part 3 of 4) A JFrame with Color (Part 3 of 4)

17‐38 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A JFrame with Color (Part 4 of 4)

A JFrame with Color (Part 4 of 4) Containers and Layout Managers Containers and Layout Managers

• Multiple components can be added to the  content pane of a  JFrame using the  add method

method

– However, the add method does not specify how  these components are to be arranged

• To describe how multiple components are to be  arranged, a layout manager is used

Th b f l l h

– There are a number of layout manager classes such  as BorderLayout, FlowLayout, and 

GridLayout

– If a layout manager is not specified, a default layout 

manager is used

(11)

Border Layout Managers Border Layout Managers

• A  BorderLayout manager places the 

components that are added to a  JFrame object  into five regions

into five regions

– These regions are: BorderLayout.NORTH,  BorderLayout.SOUTH, BorderLayout.EAST, 

d BorderLayout.WEST, and  BorderLayout.Center

• A A  BorderLayout BorderLayout manager is added to a manager is added to a  JFrame using the setLayout method

– For example:

setLayout(new BorderLayout());

17‐41 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The BorderLayout Manager (Part 1 of 4) y g ( )

17‐42 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The BorderLayout Manager (Part 2 of 4) y g ( )

17‐43 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The BorderLayout Manager (Part 3 of 4) y g ( )

17‐44 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(12)

The BorderLayout Manager (Part 4 of 4) y g ( )

17‐45 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

BorderLayout Regions BorderLayout Regions

17‐46 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Border Layout Managers Border Layout Managers

Th i di h h f h fi

• The previous diagram shows the arrangement of the five  border layout regions

– Note: None of the lines in the diagram are normally visible Note:  None of the lines in the diagram are normally visible

• When using a BorderLayout manager, the location of the  component being added is given as a second argument to the 

dd h d add method

add(label1, BorderLayout.NORTH);

– Components can be added in any order since their location is specified Components can be added in any order since their location is specified

Flow Layout Managers Flow Layout Managers

Th Fl L t i th i l t l t

• The  FlowLayout manager is the simplest layout  manager

setLayout(new FlowLayout());

setLayout(new FlowLayout());

– It arranges components one after the other, going from  left to right

– Components are arranged in the order in which they are  added

• Since a location is not specified the Since a location is not specified, the  add add method has method has  only one argument when using the 

FlowLayoutManager

add.(label1);

(13)

Grid Layout Managers

A G idL t t i t

Grid Layout Managers

• A GridLayout manager arranges components in a two‐

dimensional grid with some number of rows and columns

setLayout(new GridLayout(rows, columns)); y ( y ( , ));

– Each entry is the same size

– The two numbers given as arguments specify the number of rows and  columns

columns

– Each component is stretched so that it completely fills its grid position

– Note:  None of the lines in the diagram are normally visible

17‐49 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Grid Layout Managers Grid Layout Managers

Wh i th G idL t l th th d

• When using the GridLayout class, the method  add has only one argument

add(label1);

add(label1);

– Items are placed in the grid from left to right

– The top row is filled first, then the second, and so forth – Grid positions may not be skipped

• Note the use of a main method in the GUI class  it lf i th f ll i l

itself in the following example

– This is often a convenient way of demonstrating a class

17‐50 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The GridLayout Manager (Part 1 of 4) The GridLayout Manager (Part 1 of 4)

17‐51 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The GridLayout Manager (Part 2 of 4) The GridLayout Manager (Part 2 of 4)

17‐52 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(14)

The GridLayout Manager (Part 3 of 4) The GridLayout Manager (Part 3 of 4)

17‐53 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The GridLayout Manager (Part 4 of 4) The GridLayout Manager (Part 4 of 4)

17‐54 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Some Layout Managers

Some Layout Managers Panels Panels

• A GUI is often organized in a hierarchical fashion,  with containers called panels inside other containers

• A panel is an object of the  JPanel class that serves  as a simple container

– It is used to group smaller objects into a larger component  (the panel)

– One of the main functions of a JPanel object is to 

subdivide a JFrame or other container

(15)

Panels Panels

• Both a JFrame and each panel in a JFrame can use  different layout managers

– Additional panels can be added to each panel, and each panel  p p , p can have its own layout manager

– This enables almost any kind of overall layout to be used in a GUI setLayout(new BorderLayout());

JPanel somePanel = new JPanel();

somePanel.setLayout(new FlowLayout());

• Note in the following example that panel and button  g p p objects are given color using the setBackground method without invoking getContentPane

– The The getContentPane getContentPane method is only used when adding color method is only used when adding color  to a JFrame

17‐57 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Using Panels (Part 1 of 8) Using Panels (Part 1 of 8)

17‐58 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Using Panels (Part 2 of 8) Using Panels (Part 2 of 8)

17‐59 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Using Panels (Part 3 of 8) Using Panels (Part 3 of 8)

17‐60 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(16)

Using Panels (Part 4 of 8) Using Panels (Part 4 of 8)

17‐61 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Using Panels (Part 5 of 8) Using Panels (Part 5 of 8)

17‐62 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Using Panels (Part 6 of 8)

Using Panels (Part 6 of 8) Using Panels (Part 7 of 8) Using Panels (Part 7 of 8)

(17)

Using Panels (Part 8 of 8) Using Panels (Part 8 of 8)

17‐65 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Container Class The Container Class

A l h i d d l f h l C i i

• Any class that is a descendent class of the class Container is  considered to be a container class

– The Container e Co ta e class is found in the java.awt c ass s ou d t e ja a.a t package, not in the  pac age, ot t e Swing library

• Any object that belongs to a class derived from the 

Container class (or its descendents) can have components Container class (or its descendents) can have components  added to it

• The classes The classes JFrame JFrame and and JPanel JPanel are descendent classes of are descendent classes of  the class Container

– Therefore they and any of their descendents can serve as a container

17‐66 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The JComponent Class The JComponent Class

d d l f h l

• Any descendent class of the class 

JComponent is called a component class

– Any  JComponent object or component can be  added to any container class object

– Because it is derived from the class Container,  a JComponent can also be added to another  JComponent

17‐67 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Objects in a Typical GUI Objects in a Typical GUI

l b il i i i

• Almost every GUI built using Swing container  classes will be made up of three kinds of  objects:

1. The container itself, probably a panel or  window‐like object

2. The components added to the container such as  labels, buttons, and panels

3. A layout manager to position the components  inside the container

17‐68 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(18)

Hierarchy of Swing and AWT Classes

17‐69 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Tip: Code a GUI's Look and Actions Separately Tip:  Code a GUI s Look and Actions Separately

Th t k f d i i S i GUI b di id d i t t

• The task of designing a Swing GUI can be divided into two  main subtasks:

1. Designing and coding the appearance of the GUI on the screen 2. Designing and coding the actions performed in response to user 

actions

• In particular, it is useful to implement the  p p

actionPerformed method as a stub, until the GUI looks  the way it should

public void actionPerformed(ActionEvent e)

p ( )

{}

• This philosophy is at the heart of the technique used by the  Model View Controller pattern

Model‐View‐Controller pattern

17‐70 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The Model View Controller Pattern

The Model‐View‐Controller Pattern Menu Bars Menus and Menu Items Menu Bars, Menus, and Menu Items

A i bj f h l

A menu is an object of the class  JMenu

A choice on a menu is called a menu item, and is an 

bj f h l

object of the class JMenuItem

– A menu can contain any number of menu items

A i i id ifi d b h i h l b l i d i

– A menu item is identified by the string that labels it, and is  displayed in the order to which it was added to the menu

• The add method is used to add a menu item to a

• The  add method is used to add a menu item to a  menu in the same way that a component is added to  a container object

a container object

(19)

Menu Bars Menus and Menu Items Menu Bars, Menus, and Menu Items

• The following creates a new menu, and then adds  a menu item to it

JMenu diner = new

JMenu("Daily Specials");

t l h

JMenuItem lunch = new

JMenuItem("Lunch Specials");

lunch addActionListener(this);

lunch.addActionListener(this);

diner.add(lunch);

– Note that the this parameter has been registered as – Note that the this parameter has been registered as 

an action listener for the menu item

17‐73 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Nested Menus Nested Menus

• The class  JMenu is a descendent of the  JMenuItem class

– Every JMenu can be a menu item in another  menu

menu

– Therefore, menus can be nested

b dd d h h

• Menus can be added to other menus in the  same way as menu items

17‐74 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Menu Bars and JFrame Menu Bars and JFrame

A b i t i f t i ll l d

A menu bar is a container for menus, typically placed near  the top of a windowing interface

• The add method is used to add a menu to a menu bar in the  same way that menu items are added to a menu

JMenuBar bar = new JMenuBar();

bar.add(diner);

bar.add(diner);

• The menu bar can be added to a JFrame in two different  ways

1 Using the setJMen Bar method 1. Using the  setJMenuBar method

setJMenuBar(bar);

2. Using the  add method – which can be used to add a menu bar to a  JFrame or any other container

JFrame or any other container

17‐75 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A GUI with a Menu (Part 1 of 8) A GUI with a Menu (Part 1 of 8)

17‐76 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(20)

A GUI with a Menu (Part 2 of 8) A GUI with a Menu (Part 2 of 8)

17‐77 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A GUI with a Menu (Part 3 of 8) A GUI with a Menu (Part 3 of 8)

17‐78 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A GUI with a Menu (Part 4 of 8)

A GUI with a Menu (Part 4 of 8) A GUI with a Menu (Part 5 of 8) A GUI with a Menu (Part 5 of 8)

(21)

A GUI with a Menu (Part 6 of 8) A GUI with a Menu (Part 6 of 8)

17‐81 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A GUI with a Menu (Part 7 of 8) A GUI with a Menu (Part 7 of 8)

17‐82 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A GUI with a Menu (Part 8 of 8) A GUI with a Menu (Part 8 of 8)

17‐83 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The AbstractButton and Dimension Classes

• The classes JButton and JMenuItem are  derived classes of the abstract class named  AbstractButton

AbstractButton

– All of their basic properties and methods are  inherited from the class AbstractButton

• Objects of the  Dimension class are used with  buttons, menu items, and other objects to  specify a size

specify a size

– The Dimension class is in the package java.awt

Dimension(int width, int height) ( , g )

– Note: width and height parameters are in pixels

17‐84 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(22)

The setActionCommand Method The setActionCommand Method

Wh li k b i i fi d

• When a user clicks a button or menu item, an event is fired  that normally goes to one or more action listeners

– The action event becomes an argument to an actionPerformed e act o e e t beco es a a gu e t to a act o e o ed method

– This action event includes a  String instance variable called the  action command for the button or menu item

action command for the button or menu item

– The default value for this string is the string written on the button or  the menu item

This string can be retrieved with the getActionCommand method – This string can be retrieved with the getActionCommand method

e.getActionCommand()

17‐85 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

The setActionCommand Method The setActionCommand Method

Th i d h d b d

• The setActionCommand method can be used to  change the action command for a component

Thi i i ll f l h t b tt

– This is especially useful when two or more buttons or  menu items have the same default action command  strings g

JButton nextButton = new JButton("Next");

nextButton.setActionCommand("Next Button");

JMenuItem choose = new JMenuItem("Next");

choose.setActionCommand("Next Menu Item");

17‐86 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Some Methods in the Class AbstractButton (P 1 f 3)

(Part 1 of 3)

Some Methods in the Class AbstractButton (P 2 f 3)

(Part 2 of 3)

(23)

Some Methods in the Class AbstractButton (P 3 f 3)

(Part 3 of 3)

17‐89 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Listeners as Inner Classes Listeners as Inner Classes

Of i d f h i i li bj

• Often, instead of having one action listener object  deal with all the action events in a GUI, a separate  ActionListener class is created for each button ActionListener class is created for each button  or menu item

– Each button or menu item has its own unique action – Each button or menu item has its own unique action 

listener

– There is then no need for a multiway if‐else statement y

• When this approach is used, each class is usually  made a private inner class

17‐90 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Listeners as Inner Classes (Part 1 of 6) Listeners as Inner Classes (Part 1 of 6)

17‐91 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Listeners as Inner Classes (Part 2 of 6) Listeners as Inner Classes (Part 2 of 6)

17‐92 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(24)

Listeners as Inner Classes (Part 3 of 6) Listeners as Inner Classes (Part 3 of 6)

17‐93 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Listeners as Inner Classes (Part 4 of 6) Listeners as Inner Classes (Part 4 of 6)

17‐94 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Listeners as Inner Classes (Part 5 of 6)

Listeners as Inner Classes (Part 5 of 6) Listeners as Inner Classes (Part 6 of 6) Listeners as Inner Classes (Part 6 of 6)

(25)

Text Fields Text Fields

A text field is an object of the class  JTextField

– It is displayed as a field that allows the user to enter a  single line of text

private JTextField name;

. . .

name = new JTextField(NUMBER_OF_CHAR);

– In the text field above at least In the text field above, at least  NUMBER_OF_CHAR NUMBER OF CHAR characters can be visible

17‐97 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Text Fields Text Fields

Th i l t t ith dditi l St i

• There is also a constructor with one additional String parameter for displaying an initial String in the text field

JTextField name = new JTextField( (

"Enter name here.", 30);

• A Swing GUI can read the text in a text field using the  h d

getText method

String inputString = name.getText();

• The method setText can be used to display a new text

• The method setText can be used to display a new text  string in a text field

name.setText("This is some output");

17‐98 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Text Field (Part 1 of 7) A Text Field (Part 1 of 7)

17‐99 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Text Field (Part 2 of 7) A Text Field (Part 2 of 7)

17‐100 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(26)

A Text Field (Part 3 of 7) A Text Field (Part 3 of 7)

17‐101 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Text Field (Part 4 of 7) A Text Field (Part 4 of 7)

17‐102 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Text Field (Part 5 of 7)

A Text Field (Part 5 of 7) A Text Field (Part 6 of 7) A Text Field (Part 6 of 7)

(27)

A Text Field (Part 7 of 7) A Text Field (Part 7 of 7)

17‐105 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Text Areas Text Areas

A t t i bj t f th l JT tA

A text area is an object of the class JTextArea

– It is the same as a text field, except that it allows multiple lines – Two parameters to the Two parameters to the JTextArea JTextArea constructor specify the minimum constructor specify the minimum 

number of lines, and the minimum number of characters per line that  are guaranteed to be visible

JTextArea theText = new JTextArea(5,20);

JTextArea theText new JTextArea(5,20);

– Another constructor has one addition  String parameter for the  string initially displayed in the text area

JTe tArea theTe t ne JTe tArea(

JTextArea theText = new JTextArea(

"Enter\ntext here." 5, 20);

17‐106 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Text Areas Text Areas

• The line‐wrapping policy for a  JTextArea can be  set using the method  setLineWrap

– The method takes one boolean type argument

– If the argument is true, then any additional characters at  the end of a line will appear on the following line of the  text area

If th t i f l th t h t ill i

– If the argument is false, the extra characters will remain  on the same line and not be visible

theText setLineWrap(true);

theText.setLineWrap(true);

17‐107 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Text Fields and Text Areas Text Fields and Text Areas

• A  JTextField or  JTextArea can be set so that  it can not be changed by the user

theText.setEditable(false);

– This will set theText so that it can only be edited by the 

GUI t th

GUI program, not the user

– To reverse this, use true instead (this is the default)

theText setEditable(true);

theText.setEditable(true);

17‐108 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(28)

Tip: Labeling a Text Field Tip:  Labeling a Text Field

• In order to label one or more text fields:

– Use an object of the class  j JLabel

– Place the text field(s) and label(s) in a  JPanel Treat the JPanel as a single component – Treat the  JPanel as a single component

17‐109 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Numbers of Characters Per Line Numbers of Characters Per Line

• The number of characters per line for a 

JTextField or JTextArea object is the number  of em spaces

An em space is the space needed to hold one  uppercase letter  M

– The letter M is the widest letter in the alphabet

– A line specified to hold 20 M 's will almost always be able to  hold more than 20 characters

17‐110 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Tip: Inputting and Outputting Numbers Tip:  Inputting and Outputting Numbers

Wh i i b f S i

• When attempting to input numbers from any Swing  GUI, input text must be converted to numbers

If th t th b 42 i JT tFi ld th

– If the user enters the number 42 in a JTextField, the  program receives the string "42" and must convert it to  the integer 42 g

• The same thing is true when attempting to output a  number

– In order to output the number 42, it must first be  converted to the string "42"

The Class JTextComponent The Class JTextComponent

• Both  JTextField and  JTextArea are derived  classes of the abstract class  JTextComponent

• Most of their methods are inherited from 

JTextComponent and have the same meanings

– Except for some minor redefinitions to account for having 

just one line or multiple lines

(29)

Some Methods in the Class JTextComponent (Part 1 of 2)

17‐113 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

Some Methods in the Class JTextComponent (Part 2 of 2)

17‐114 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Swing Calculator A Swing Calculator

A GUI f i l l l t k i t t l f

• A GUI for a simple calculator keeps a running total of  numbers

– The user enters a number in the text field and then clicks The user enters a number in the text field, and then clicks  either + or –

– The number in the text field is then added to or subtracted  from the r nning total and displa ed in the te t field from the running total, and displayed in the text field – This value is kept in the instance variable result – When the GUI is first run, or when the user clicks the When the GUI is first run, or when the user clicks the 

Reset button, the value of result is set to zero

17‐115 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Swing Calculator A Swing Calculator

f h b i i

• If the user enters a number in an incorrect  format, then one of the methods throws a  NumberFormatException

– The exception is caught in the catch block inside  the  actionPerformed method

– Note that when this exception is thrown, the value  of the instance variable result is not changed

17‐116 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(30)

A Simple Calculator (Part 1 of 11) A Simple Calculator (Part 1 of 11)

17‐117 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Simple Calculator (Part 2 of 11) A Simple Calculator (Part 2 of 11)

17‐118 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Simple Calculator (Part 3 of 11)

A Simple Calculator (Part 3 of 11) A Simple Calculator (Part 4 of 11) A Simple Calculator (Part 4 of 11)

(31)

A Simple Calculator (Part 5 of 11) A Simple Calculator (Part 5 of 11)

17‐121 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Simple Calculator (Part 6 of 11) A Simple Calculator (Part 6 of 11)

17‐122 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Simple Calculator (Part 7 of 11) A Simple Calculator (Part 7 of 11)

17‐123 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Simple Calculator (Part 8 of 11) A Simple Calculator (Part 8 of 11)

17‐124 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

(32)

A Simple Calculator (Part 9 of 11) A Simple Calculator (Part 9 of 11)

17‐125 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Simple Calculator (Part 10 of 11) A Simple Calculator (Part 10 of 11)

17‐126 Copyright © 2012 Pearson Addison‐Wesley. All rights reserved.

A Simple Calculator (Part 11 of 11)

A Simple Calculator (Part 11 of 11) Uncaught Exceptions Uncaught Exceptions

• In a Swing program, throwing an uncaught exception  does not end the GUI

– However, it may leave it in an unpredictable state

• It is always best to catch any exception that is thrown 

even if all the catch block does is output an error 

message, or ask the user to reenter some input

Figure

Updating...

References

Related subjects :