Features of Java CS 3331 Fall 2009 1 Outline Abstract class Interface Application animation applets 2 Motivation Drawing Board 3 Class Shape public class Shape private int x y private Color c public Shape int x int y Color c this x x this y y this c c public void draw Graphics g public int getX return x public int getY return y public Color getColor return c Q What is wrong with this definition 4 At Least Two Problems 5 Solution Abstract Class public abstract class Shape private int x y private Color c protected Shape int x int y Color c this x x this y y this c c public abstract void draw Graphics g no body here public int getX return x public int getY return y public Color getColor return c 6 Abstract Classes Classes that can t be instantiated Used to define common properties that are to be inherited by subclasses Often provide partial implementations May include abstract methods methods that have no body 7 How Abstract Classes Solve the Problems 8 In Sum Abstract Classes Provide partial implementations to be inherited by subclasses May include abstract methods Are good for factoring out common properties among classes 9 Outline Abstract classes Interfaces Application animation applets 10 Interfaces Declare features to be supported by classes Provide no implementation Only allow public abstract methods and constants public static final fields public interface Runnable public void run 11 Why Interfaces To draw automobiles 0 DrawingBoard Circle Shape abstract Rectangle Vehicle Triangle Automobile 12 How to Draw Automobiles By programming to the interface 13 In Sum Interfaces Good for establishing a well defined boundary between modules subsystems Thus make programs more reusable and maintainable 14 Abstract Classes vs Interfaces Partial code vs no code at all Class vs interface 15 Exercise Separate the display of DigitalClock to support various ways of displaying time e g digital analog customized background etc Explain your design by drawing a UML class diagram DigitalClock timer Timer font Font color Color DigitalClock void start void stop void paint g Graphics void 16 Applications Animation Applets Enhanced digital clock applet Scrolling banner applet Initial version Double buffered version 17 Enhanced Digital Clock Applet Setting applet parameters in the Web page html applet code DigitalClock2 class width 250 height 80 param name color value blue applet html 18 Getting Applet Parameters import java awt Color public class DigitalClock2 extends DigitalClock public void init String param getParameter color if red equals param color Color RED else if blue equals param color Color BLUE else if yellow equals param color Color YELLOW else color Color GREEN 19 Animation Applets Enhanced digital clock applet Scrolling banner applet Initial version Double buffered version 20 The java awt Graphics Class Class Graphics Represents graphics context an abstraction of various drawing surfaces e g screen printer offscreen image an image stored in memory Provide a rich set of graphics methods drawString drawArc drawOval drawPolygon drawRect drawRoundRect drawLine fillArc fillOval fillPolygon fillRect fillRoundRect 21 Graphics Class Cont Other methods setColor color setFont font setPaintMode setXORMode color getColor getFont getFontMetrics getFontMetrics font set the current color set the current font set the paint or overwrite mode set the XOR mode get the current color get the current font get the font metrics of the current font get the font metrics for the specified font 22 The java awt FontMetrics Class leading ascent descent Up height baseline width getAscent getDescent getHeight getLeading stringWidth s 23 Scrolling Banner Applet import java awt import java awt event import javax swing public class ScrollingBanner extends java applet Applet field declarations public void init public void paint Graphics g public void start public void stop 24 Field Declarations protected String text protected Font font new java awt Font Sans serif Font BOLD 24 protected Dimension dim protected int x y protected int delay 100 protected int offset 1 protected Timer timer animation timer 25 Initialization public void init get parameters delay and text String att getParameter delay if att null delay Integer parseInt att att getParameter text if att null text att else text Go Miners set initial position of the text dim getSize x dim width y font getSize initialize animation timer timer new Timer delay new ActionListener public void actionPerformed repaint 26 Painting the Current Frame 0 0 length viewing area Go Miners Go Miners length y x y leftmost position current position Go Miners dim width 1 y dim width y rightmost position 27 Painting the Current Frame Cont public void paint Graphics g get the font metrics to determine the length of the text g setFont font FontMetrics fm g getFontMetrics int length fm stringWidth text adjust the position of text from the previous frame x x offset if the text is completely off to the left end move the position back to the right end if x length x dim width set the pen color and draw the background g setColor Color BLACK g fillRect 0 0 dim width dim height set the pen color then draw the text g setColor Color GREEN g drawString text x y 28 The start and stop Methods public void start timer start public void stop timer stop 29 Exercise Define a subclass of ScrollingBanner called ScrollingBanner3 that scrolls the banner vertically Reuse code as much as possible and minimize code duplication 30 How to Avoid Flickering Flickering is caused by repaint repaint calls the update method The default update method does the following paint the whole area with the background color set the foreground color call the paint method The update method is also called by the system to update windows Solution override the update method use an off screen image 31 Using Off Screen Image Double buffering import java awt public class ScrollingBanner2 extends ScrollingBanner protected Image image off screen image protected Graphics offscreen off screen graphics public update Graphics g public paint Graphics g 32 Using Off Screen Image Cont public void update Graphics g create the offscreen image if it is the first time if image null image createImage dim width dim height offscreen image getGraphics draw the current frame into the off screen image using the paint method of the superclass super paint offscreen copy the off screen image to the screen g drawImage image 0 0 this public void paint
View Full Document