Filthy Rich Clients refers to ultra-graphically rich applications that ooze cool. They suck the user in from the outset and hang on to them with a death grip of excitement. Filthy Rich Clients: Developing Animated and Graphical Effects for Desktop Java (TM) Applications shows you how to build better, more effective, cooler desktop applications that intensify the user experience.The keys to Filthy Rich Clients are graphical and animated effects. These kinds of effects provide ways of enhancing the user experience of the application through more attractive GUIs, dynamic effects that give your application a pulse, and animated transitions that keep your user connected to the logical flow of the application. The book also discusses how to do so effectively, making sure to enrich applications in sensible ways.In-depth coverage includesGraphics and GUI fundamentals: Dig deep into the internals of how Swing and Java 2D work together to display GUI applications onscreen. Learn how to maximize the flexibility of these libraries and use them most effectively. Performance: Follow in-depth discussions and tips throughout the book that will help you write high-performing GUI applications. Images: Understand how images are created and used to make better Java applications. Advanced graphics: Learn more about elements of Swing and Java 2D that are of particular benefit to Filthy Rich Clients. Animation: Discover general concepts of animation, as well as how to use the facilities provided in the Java platform. Learn new utility libraries that vastly simplify animations in Java. Effects: Learn how to create, customize, and use static and animated effects-the mainstays of Filthy Rich Clients.Code examples illustrate key concepts, and the book's companion Web site, http://filthyrichclients.org, includes extensive demos, utility libraries, additional information on related technologies, and more. Informal, fun, and, most of all, useful, this book is great for any developer working with Java to build desktop applications.
Chet Haase is a client architect in the Java SE group at Sun Microsystems. Passionate about graphics, he works with all desktop Java technologies, including Swing and Java 2D. He's worked with graphics technologies from 2D to 3D and from applications down to the driver level. Chet holds an M.S. in computer and information sciences from the University of Oregon and a B.A. in math from Carleton College.Romain Guy has served as a software engineer at Google and on the Swing Team at Sun Microsystems. His primary interests are graphics and graphical user interface development. Romain has written for several print and online journals, and he holds an M.S. in computer and information sciences.
Foreword xviiPreface xixAcknowledgments xxvAbout the Authors xxviiIntroduction 1Part I: Graphics and GUI Fundamentals 9Chapter 1: Desktop Java Graphics APIs: Swing, AWT, and Java 2D 11Abstract Window Toolkit (AWT) 12Java 2D 13Swing 13Chapter 2: Swing Rendering Fundamentals 15Events 16Swing Painting 17Swing Rendering 20Double-Buffering 28Threading 31Chapter 3: Graphics Fundamentals 43Java 2D 43Rendering 45Chapter 4: Images 91Image Types 92BufferedImage 95Image Scaling 98Chapter 5: Performance 115Use the Clip 115Compatible Images 121Managed Images 126Intermediate Images 134Optimal Primitive Rendering 143Benchmark 144Command-Line Flags 145Part II: Advanced Graphics Rendering 151Chapter 6: Composites 153AlphaComposite 153AlphaComposite: The 12 Rules 155Creating and Setting Up an AlphaComposite 163Common Uses of AlphaComposite 164Issues with AlphaComposite 168Create Your Own Composite 170Summary 177Chapter 7: Gradients 179Two-Stops Linear Gradient 179Special Effects with Regular Gradients 182Multistops Linear Gradient 187Radial Gradient 189Optimizing Gradients 193Chapter 8: Image Processing 199Image Filters 200Processing an Image with BufferedImageOp 201AffineTransformOp 203ColorConvertOp 204ConvolveOp 206LookupOp 211RescaleOp 213Custom BufferedImageOp 214A Note about Filters Performance 222Summary 222Chapter 9: Glass Pane 223Painting on the Glass Pane 225Blocking Input Events 230Chapter 10: Layered Panes 237Using Layered Pane Layers 238Ordering Components within a Single Layer 242Layered Panes and Layouts 243Alternative to JLayeredPane with Layouts 244Chapter 11: Repaint Manager 249When Swing Gets Too Smart 249Meet the RepaintManager 251A Reflection on RepaintManager 253Summary 262Part III: Animation 263Chapter 12: Animation Fundamentals 265It's About Time 265Fundamental Concepts 266Frame-Based Animation 266Timing (and Platform Timing Utilities) 275Resolution 288Animating Your Swing Application 300Summary 314Chapter 13: Smooth Moves 315Background: Why Does My Animation Look Bad? 315What Makes Animations Choppy, and How to Smooth Them Out 316SmoothMoves: The Demo 335Summary 341Chapter 14: Timing Framework: Fundamentals 343Introduction 343Core Concepts 345Interpolation 359Summary 378Chapter 15: Timing Framework: Advanced Features 379Triggers 379Property Setters 392Summary 420Part IV: Effects 421Chapter 16: Static Effects 423Blur 423Reflection 434Drop Shadows 437Highlights 442Sharpening 450Summary 458Chapter 17: Dynamic Effects 459Motion 460Fading 465Pulse 473Spring 484Morphing 489Summary 495Chapter 18: Animated Transitions 497Animating Application State Segues 497Animated Transitions: The Library 501Example: SearchTransition 503Example: SearchTransition Revisited: Customization 516Example: ImageBrowser 519Animated Transitions: Under the Hood, or How Do You Get Swing to Do That? 527Summary 530Chapter 19: Birth of a Filthy Rich Client 531Aerith 531Workflow Paper Design 533The Vision 535Screen Paper Design 537Mockup 538From Mockup to Code 540But . . . I'm Not an Artist! 544Choosing Nice Colors 545Read Design Books 547Summary 548Conclusion 549Index 553