Chapter 8 Getting Started with Graphics Programming

Preview:

DESCRIPTION

Chapter 8 Getting Started with Graphics Programming. Graphics Class Hierarchy Frames Creating & centering frames, adding components to frames Layout Managers FlowLayout, GridLayout, BorderLayout Drawing on Panels The paintComponent method Using Colors, Fonts, and Font Metrics - PowerPoint PPT Presentation

Citation preview

Chapter 8 Getting Started with Graphics Programming

Graphics Class HierarchyGraphics Class Hierarchy FramesFrames

Creating & centering frames, adding components to framesCreating & centering frames, adding components to frames Layout Managers Layout Managers

FlowLayout, GridLayout, BorderLayoutFlowLayout, GridLayout, BorderLayout Drawing on PanelsDrawing on Panels

The paintComponent methodThe paintComponent method Using Colors, Fonts, and Font MetricsUsing Colors, Fonts, and Font Metrics Drawing Geometric FiguresDrawing Geometric Figures

Lines, Rectangles, Ovals, Arcs, and PolygonsLines, Rectangles, Ovals, Arcs, and Polygons Event-Driven ProgrammingEvent-Driven Programming

Event Source, Listener, Listener InterfaceEvent Source, Listener, Listener Interface

Graphics Class Hierarchy (Swing)

AWTEvent

Font

FontMetrics

Component

Graphics

Object Color

Container

Panel Applet

Frame

Dialog

Window

JComponent

JApplet

JFrame

JDialog

Swing Componentsin the javax.swing package

Lightweight

Heavyweight

Classes in the javax.swingpackage

1

LayoutManager

*

JComponent .

JButton

JMenuItem

JCheckBoxMenuItem

AbstractButton

JComponent

JMenu

.JRadioButtonMenuItem

.JToggleButton JCheckBox

JRadioButton

.JComboBox

.JInternalFrame .JLayeredPane

.JList .JMenuBar .JOptionPane

.JPopupMenu

.JProgressBar

.JPane

.JFileChooser .JScrollBar .JScrollPane

.JSeparator

.JSplitPane

.JSlider .JTabbedPane

.JTable

.JTableHeader

.JTextField .JTextComponent

.JEditorPane

.JTextArea

.JToolBar

.JToolTip

.JTree

.JRootPane

.JPanel

.JPasswordField

.JColorChooser

.JLabel

AWT (Optional)AWTEvent

Font

FontMetrics

Component

Graphics

Object Color

Canvas

Button

TextComponent

Label

List

CheckBoxGroup

CheckBox

Choice

Container Panel Applet

Frame

Dialog FileDialog

Window

TextField

TextArea

MenuComponent MenuItem

MenuBar

Menu

Scrollbar

LayoutManager

Frames

Frame is a window that is not Frame is a window that is not contained inside another window. contained inside another window. Frame is the basis to contain other Frame is the basis to contain other user interface components in Java user interface components in Java graphical applications.graphical applications.

The Frame class can be used to create The Frame class can be used to create windows. windows.

UI Components

Frame Pull-down Menus

User InterfaceComponents (UI)

Panel

Panel

Panel

UI

Panel

UI

Panel

UI

Applet

Panel

User InterfaceComponents

Panel

User InterfaceComponents

Panel

User InterfaceComponents

Panel

User InterfaceComponents

panel

Pull-down Menus

Creating Frames

RunRun

import javax.swing.*;public class MyFrame{ public static void main(String[] args) { JFrame frame = new JFrame("Test Frame"); frame.setSize(400, 300); frame.setVisible(true); // frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); }

}

NOTE: To enable it to run in JDK 1.2, the EXIT_ON_CLOSE option is commented.

Centering Frames

• By default, a frame is displayed in the upper-left corner of the screen. • To display a frame at a specified location, you can use the setLocation(x, y) method in the JFrame class. This method places the upper-left corner of a frame at location (x, y).

Centering Frames, cont.

RunRunCenterFrameCenterFrame

screenHeight

screenWidth

frameHeight

screenWidth

(x, y)

Frame

Screen

Adding Components into a Frame

// Add a button into the frame frame.getContentPane().add( new JButton("OK"));

RunRunMyFrameWithComponentsMyFrameWithComponents

Layout Managers

Java’s layout managers provide a level of Java’s layout managers provide a level of

abstraction to automatically map your user abstraction to automatically map your user

interface on all windowing systems. interface on all windowing systems.

The UI components are placed in containers. The UI components are placed in containers.

Each container has a layout manager to Each container has a layout manager to

arrange the UI components within the arrange the UI components within the

container.container.

Kinds of Layout Managers FlowLayoutFlowLayout

GridLayoutGridLayout

BorderLayoutBorderLayout

CardLayout CardLayout

GridBagLayoutGridBagLayout

Example 8.1Testing the FlowLayout Manager

The components are arranged in the The components are arranged in the container from left to right in the order in container from left to right in the order in which they were added. When one row which they were added. When one row becomes filled, a new row is started.becomes filled, a new row is started.

ShowFlowLayoutShowFlowLayout RunRun

FlowLayout Constructors public FlowLayout(int align, int hGap, int vGap)public FlowLayout(int align, int hGap, int vGap)

Constructs a new Constructs a new FlowLayoutFlowLayout with a specified alignment, with a specified alignment, horizontal gap, and vertical gap. The horizontal gap, and vertical gap. The gapsgaps are the distances are the distances in pixel between components.in pixel between components.

public FlowLayout(int alignment)public FlowLayout(int alignment)

Constructs a new Constructs a new FlowLayoutFlowLayout with a specified alignment and a with a specified alignment and a default gap of five pixels for both horizontal and vertical.default gap of five pixels for both horizontal and vertical.

public FlowLayout()public FlowLayout()

Constructs a new Constructs a new FlowLayoutFlowLayout with a default with a defaultcenter alignment and a default gap of five pixelscenter alignment and a default gap of five pixelsfor both horizontal and vertical.for both horizontal and vertical.

Example 8.2Testing the GridLayout Manager

The The GridLayoutGridLayout manager arranges components manager arranges componentsin a grid (matrix) formation with the number ofin a grid (matrix) formation with the number ofrows and columns defined by the constructor. rows and columns defined by the constructor. The components are placed in the grid from left The components are placed in the grid from left to right starting with the first row, then the to right starting with the first row, then the second, and so on. second, and so on.

ShowGridLayoutShowGridLayout RunRun

GridLayout Constructors public GridLayout(int rows, int columns)public GridLayout(int rows, int columns)

Constructs a new Constructs a new GridLayoutGridLayout with the with the specified number of rows and columns.specified number of rows and columns.

public GridLayout(int rows, int columns, int public GridLayout(int rows, int columns, int hGap, int vGap)hGap, int vGap)

Constructs a new Constructs a new GridLayoutGridLayout with the with thespecified number of rows and columns,specified number of rows and columns,along with specified horizontal andalong with specified horizontal andvertical gaps between components.vertical gaps between components.

Example 8.3Testing the BorderLayout Manager

The The BorderLayoutBorderLayout manager divides the manager divides the window into five areas: window into five areas: East, South, West, North, East, South, West, North, and Center. Components and Center. Components are added to a are added to a BorderLayoutBorderLayout by byusingusing

ShowBorderLayoutShowBorderLayout RunRun

add(Component, constraint), where constraint is BorderLayout.EAST, BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.NORTH, or BorderLayout.CENTER.

Using Panels as Containers

Panels act as smaller containers for Panels act as smaller containers for grouping user interface components. grouping user interface components.

It is recommended that you place the It is recommended that you place the user interface components in panels and user interface components in panels and place the panels in a frame. You can also place the panels in a frame. You can also place panels in a panel. place panels in a panel.

Example 8.4 Testing Panel

This example uses panels to organize This example uses panels to organize components. The program creates a user components. The program creates a user interface for a Microwave oven. interface for a Microwave oven.

TestPanelsTestPanels RunRun

Drawing on Panels

JPanel can be used to draw graphics (including JPanel can be used to draw graphics (including text) and enable user interaction. text) and enable user interaction.

To draw in a panel, you create a new class To draw in a panel, you create a new class that extends JPanel and override the that extends JPanel and override the paintComponent method to tell the panel how paintComponent method to tell the panel how to draw things. to draw things. You can then display strings, draw geometric You can then display strings, draw geometric shapes, and view images on the panel. shapes, and view images on the panel.

The Color Class

Color c = new Color(r, g, b);Color c = new Color(r, g, b);rr, , gg, and , and bb specify a color by its red, specify a color by its red, green, and blue components.green, and blue components.

Example:Example:Color c = new Color(128, 100, 100);Color c = new Color(128, 100, 100);

Setting ColorsYou can use the following methods to set the component’s You can use the following methods to set the component’s background and foreground colors:background and foreground colors:

setBackground(Color c) setBackground(Color c)

setForeground(Color c)setForeground(Color c)

Example:Example:

setBackground(Color.yellow); setForeground(Color.red);setBackground(Color.yellow); setForeground(Color.red);

The Font Class

Font myFont = Font(name, style, size);Font myFont = Font(name, style, size);

Example:Example:Font myFont = new Font("SansSerif ", Font.BOLD, 16);Font myFont = new Font("SansSerif ", Font.BOLD, 16);Font myFont = new Font("Serif", Font.BOLD+Font.ITALIC, 12)Font myFont = new Font("Serif", Font.BOLD+Font.ITALIC, 12) ;;

Setting Fonts

public void paint(Graphics g)public void paint(Graphics g)

{{

Font myFont = new Font("Times", Font.BOLD, 16);Font myFont = new Font("Times", Font.BOLD, 16);

g.setFont(myFont);g.setFont(myFont);

g.drawString("Welcome to Java", 20, 40);g.drawString("Welcome to Java", 20, 40);

//set a new font//set a new font

g.setFont(new Font("Courier", Font.BOLD+Font.ITALIC, 12));g.setFont(new Font("Courier", Font.BOLD+Font.ITALIC, 12));

g.drawString("Welcome to Java", 20, 70);g.drawString("Welcome to Java", 20, 70);

}}

The FontMetrics Class

Get FontMetrics g.getFontMetrics(Font f);g.getFontMetrics(Font f);

oror g.getFontMetrics();g.getFontMetrics();

public int getAscent()public int getAscent()

public int getDescent()public int getDescent()

public int getLeading()public int getLeading()

public int getHeight()public int getHeight()

public int stringWidth(String str)public int stringWidth(String str)

Example 8.5Using FontMetrics

Objective: Display “Welcome to Java” in SansSerif Objective: Display “Welcome to Java” in SansSerif 20-point bold, centered in the frame.20-point bold, centered in the frame.

TestFontMetricsTestFontMetrics

RunRun

Drawing Geometric Figures

Drawing LinesDrawing Lines Drawing RectanglesDrawing Rectangles Drawing OvalsDrawing Ovals Drawing ArcsDrawing Arcs Drawing PolygonsDrawing Polygons

Drawing Lines

drawLine(x1, y1, x2, y2);drawLine(x1, y1, x2, y2);

Drawing Rectangles drawRect(x, y, w, h);drawRect(x, y, w, h);

fillRect(x, y, w, h);fillRect(x, y, w, h);

Drawing Rounded Rectangles drawRoundRect(x, y, w, h, aw, ah);drawRoundRect(x, y, w, h, aw, ah);

fillRoundRect(x, y, w, h, aw, ah);fillRoundRect(x, y, w, h, aw, ah);

Drawing Ovals drawOval(x, y, w, h);drawOval(x, y, w, h);

fillOval(x, y, w, h);fillOval(x, y, w, h);

Drawing Arcs drawArc(x, y, w, h, angle1, angle2);drawArc(x, y, w, h, angle1, angle2); fillArc(x, y, w, h, angle1, angle2);fillArc(x, y, w, h, angle1, angle2);

Drawing Polygonsint x[] = {40, 70, 60, 45, 20};int x[] = {40, 70, 60, 45, 20};int y[] = {20, 40, 80, 45, 60};int y[] = {20, 40, 80, 45, 60};g.drawPolygon(x, y, x.length);g.drawPolygon(x, y, x.length);g.fillPolygon(x, y, x.length);g.fillPolygon(x, y, x.length);

Example 8.6Drawing a Clock

Objective: Use drawing and trigonometric Objective: Use drawing and trigonometric methods to draw a clock showing the specified methods to draw a clock showing the specified hour, minute, and second in a frame.hour, minute, and second in a frame.

DisplayClockDisplayClock

RunRun

DrawClockDrawClock

Event-Driven Programming

Procedural programmingProcedural programming is executed in is executed in procedural order.procedural order.

In In event-driven programmingevent-driven programming, code is , code is executed upon activation of events. executed upon activation of events.

Events An An eventevent can be defined as a type of signal can be defined as a type of signal

to the program that something has to the program that something has happened. happened.

The event is generated by external user The event is generated by external user actions such as mouse movements, mouse actions such as mouse movements, mouse button clicks, and keystrokes, or by the button clicks, and keystrokes, or by the operating system, such as a timer.operating system, such as a timer.

Event Information idid: A number that identifies the event. : A number that identifies the event. targettarget: The AWT component upon which the event : The AWT component upon which the event

occurred. occurred. argarg: Additional information about the AWT components. : Additional information about the AWT components. x, y coordinatesx, y coordinates: The mouse pointer location when a : The mouse pointer location when a

mouse movement event occurred.mouse movement event occurred. clickCountclickCount: The number of consecutive clicks for the: The number of consecutive clicks for the

mouse events. For other events, it is zero.mouse events. For other events, it is zero. whenwhen: The time stamp of the event.: The time stamp of the event. keykey: The key that was pressed or released.: The key that was pressed or released.

Event Classes

Selected User Actions

Source Event TypeUser Action Object Generated

Clicked on a button JButton ActionEvent

Changed text JTextComponent TextEvent

Double-clicked on a list item JList ActionEvent

Selected or deselected an JList ItemEvent item with a single click

Selected or deselected an item JComaboBoxItemEventa

The Delegation Model

Selected Event Handlers Event Class Listener Interface Listener Methods (Handlers)ActionEvent ActionListener actionPerformed(ActionEvent)ItemEvent ItemListener itemStateChanged(ItemEvent)WindowEvent WindowListener windowClosing(WindowEvent)

windowOpened(WindowEvent)windowIconified(WindowEvent)

windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)

windowDeactivated(WindowEvent)ContainerEvent ContainerListener componentAdded(ContainerEvent)

componentRemoved(ContainerEvent)

Example 8.7Handling Simple Action Events Objective: Display Objective: Display two buttons OK and two buttons OK and

Cancel in the window. A message is Cancel in the window. A message is displayed on the console to indicate which displayed on the console to indicate which button is clicked, when a button is clicked. button is clicked, when a button is clicked.

TestActionEventTestActionEvent

RunRun

Example 8.8Handling Window Events

TestWindowEventTestWindowEvent RunRun

Objective: Demonstrate handling the window events. Any subclass of the Window class can generate the following window events: window opened, closing, closed, activated, deactivated, iconified, and deiconified. This program creates a frame, listens to the window events, and displays a message to indicate the occurring event.

Recommended