001 package com.croftsoft.core.animation; 002 003 import java.awt.*; 004 import javax.swing.*; 005 006 import com.croftsoft.core.animation.painter.ArrayComponentPainter; 007 import com.croftsoft.core.animation.updater.ArrayComponentUpdater; 008 import com.croftsoft.core.gui.LifecycleWindowListener; 009 import com.croftsoft.core.lang.NullArgumentException; 010 import com.croftsoft.core.lang.lifecycle.Lifecycle; 011 012 /********************************************************************* 013 * Animated applet. 014 * 015 * @version 016 * $Date: 2008/04/19 21:27:13 $ 017 * @since 018 * 2003-03-07 019 * @author 020 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 021 *********************************************************************/ 022 023 public class AnimatedApplet 024 extends JApplet 025 implements ComponentAnimator, Lifecycle 026 ////////////////////////////////////////////////////////////////////// 027 ////////////////////////////////////////////////////////////////////// 028 { 029 030 protected final AnimationInit animationInit; 031 032 protected final AnimatedComponent animatedComponent; 033 034 // 035 036 protected ArrayComponentUpdater arrayComponentUpdater; 037 038 protected ArrayComponentPainter arrayComponentPainter; 039 040 ////////////////////////////////////////////////////////////////////// 041 ////////////////////////////////////////////////////////////////////// 042 043 public static void main ( String [ ] args ) 044 throws Exception 045 ////////////////////////////////////////////////////////////////////// 046 { 047 AnimationInit animationInit = null; 048 049 if ( ( args == null ) 050 || ( args.length < 1 ) ) 051 { 052 animationInit = new AnimationInit ( ); 053 } 054 else 055 { 056 animationInit = AnimationInit.load ( args [ 0 ] ); 057 } 058 059 launch ( new AnimatedApplet ( animationInit ) ); 060 } 061 062 public static void launch ( AnimatedApplet animatedApplet ) 063 ////////////////////////////////////////////////////////////////////// 064 { 065 AnimationInit animationInit = animatedApplet.animationInit; 066 067 LifecycleWindowListener.launchAppletAsDesktopApp ( 068 animatedApplet, 069 animationInit.getFrameTitle ( ), 070 animationInit.getFrameIconFilename ( ), 071 animatedApplet.getClass ( ).getClassLoader ( ), 072 true, // useFullScreenToggler, 073 animationInit.getFrameSize ( ), 074 animationInit.getShutdownConfirmationPrompt ( ) ); 075 } 076 077 ////////////////////////////////////////////////////////////////////// 078 ////////////////////////////////////////////////////////////////////// 079 080 public AnimatedApplet ( AnimationInit animationInit ) 081 ////////////////////////////////////////////////////////////////////// 082 { 083 NullArgumentException.check ( this.animationInit = animationInit ); 084 085 Double frameRate = animationInit.getFrameRate ( ); 086 087 if ( frameRate == null ) 088 { 089 animatedComponent = new AnimatedComponent ( this ); 090 } 091 else 092 { 093 animatedComponent 094 = new AnimatedComponent ( this, frameRate.doubleValue ( ) ); 095 } 096 } 097 098 public AnimatedApplet ( ) 099 ////////////////////////////////////////////////////////////////////// 100 { 101 this ( new AnimationInit ( ) ); 102 } 103 104 ////////////////////////////////////////////////////////////////////// 105 // Overridden Applet methods 106 ////////////////////////////////////////////////////////////////////// 107 108 public String getAppletInfo ( ) 109 ////////////////////////////////////////////////////////////////////// 110 { 111 return animationInit.getAppletInfo ( ); 112 } 113 114 ////////////////////////////////////////////////////////////////////// 115 // interface Lifecycle methods 116 ////////////////////////////////////////////////////////////////////// 117 118 public void init ( ) 119 ////////////////////////////////////////////////////////////////////// 120 { 121 String appletInfo = getAppletInfo ( ); 122 123 if ( appletInfo != null ) 124 { 125 System.out.println ( appletInfo ); 126 } 127 128 Color backgroundColor = animationInit.getBackgroundColor ( ); 129 130 if ( backgroundColor != null ) 131 { 132 animatedComponent.setBackground ( backgroundColor ); 133 } 134 135 Color foregroundColor = animationInit.getForegroundColor ( ); 136 137 if ( foregroundColor != null ) 138 { 139 animatedComponent.setForeground ( foregroundColor ); 140 } 141 142 Font font = animationInit.getFont ( ); 143 144 if ( font != null ) 145 { 146 animatedComponent.setFont ( font ); 147 } 148 149 Cursor cursor = animationInit.getCursor ( ); 150 151 if ( cursor != null ) 152 { 153 animatedComponent.setCursor ( cursor ); 154 } 155 156 arrayComponentUpdater = animationInit.getArrayComponentUpdater ( ); 157 158 arrayComponentPainter = animationInit.getArrayComponentPainter ( ); 159 160 if ( arrayComponentUpdater == null ) 161 { 162 arrayComponentUpdater = new ArrayComponentUpdater ( ); 163 } 164 165 if ( arrayComponentPainter == null ) 166 { 167 arrayComponentPainter = new ArrayComponentPainter ( ); 168 } 169 170 Container contentPane = getContentPane ( ); 171 172 contentPane.setLayout ( new BorderLayout ( ) ); 173 174 contentPane.add ( animatedComponent, BorderLayout.CENTER ); 175 176 animatedComponent.init ( ); 177 178 validate ( ); 179 } 180 181 public void start ( ) { animatedComponent.start ( ); } 182 183 public void stop ( ) { animatedComponent.stop ( ); } 184 185 public void destroy ( ) { animatedComponent.destroy ( ); } 186 187 ////////////////////////////////////////////////////////////////////// 188 ////////////////////////////////////////////////////////////////////// 189 190 public void update ( JComponent component ) 191 ////////////////////////////////////////////////////////////////////// 192 { 193 arrayComponentUpdater.update ( component ); 194 } 195 196 public void paint ( 197 JComponent component, 198 Graphics2D graphics ) 199 ////////////////////////////////////////////////////////////////////// 200 { 201 arrayComponentPainter.paint ( component, graphics ); 202 } 203 204 ////////////////////////////////////////////////////////////////////// 205 ////////////////////////////////////////////////////////////////////// 206 207 public void addComponentAnimator ( 208 ComponentAnimator componentAnimator ) 209 ////////////////////////////////////////////////////////////////////// 210 { 211 addComponentUpdater ( componentAnimator ); 212 213 addComponentPainter ( componentAnimator ); 214 } 215 216 public void addComponentPainter ( 217 ComponentPainter componentPainter ) 218 ////////////////////////////////////////////////////////////////////// 219 { 220 arrayComponentPainter.add ( componentPainter ); 221 } 222 223 public void addComponentUpdater ( 224 ComponentUpdater componentUpdater ) 225 ////////////////////////////////////////////////////////////////////// 226 { 227 arrayComponentUpdater.add ( componentUpdater ); 228 } 229 230 ////////////////////////////////////////////////////////////////////// 231 ////////////////////////////////////////////////////////////////////// 232 }