001 package com.croftsoft.apps.ajgp.input; 002 003 import java.awt.Color; 004 import java.awt.Graphics2D; 005 import java.awt.Point; 006 import java.awt.event.KeyAdapter; 007 import java.awt.event.KeyEvent; 008 import java.awt.event.MouseAdapter; 009 import java.awt.event.MouseEvent; 010 import java.awt.event.MouseMotionAdapter; 011 import javax.swing.JComponent; 012 013 import com.croftsoft.core.animation.ComponentAnimator; 014 015 /********************************************************************* 016 * User input ComponentAnimator implementation example. 017 * 018 * @version 019 * $Date: 2008/04/19 21:30:58 $ 020 * @since 021 * 2003-09-29 022 * @author 023 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 024 *********************************************************************/ 025 026 public final class InputAnimator 027 implements ComponentAnimator 028 ////////////////////////////////////////////////////////////////////// 029 ////////////////////////////////////////////////////////////////////// 030 { 031 032 private static final Color BACKGROUND_COLOR = Color.BLACK; 033 034 private static final Color FOREGROUND_COLOR = Color.GREEN; 035 036 private static final String TEXT = "CroftSoft Input Example"; 037 038 // 039 040 private KeyEvent keyEvent; 041 042 private Point mousePoint; 043 044 private boolean mousePressed; 045 046 private int x; 047 048 private int y; 049 050 ////////////////////////////////////////////////////////////////////// 051 ////////////////////////////////////////////////////////////////////// 052 053 public InputAnimator ( JComponent component ) 054 ////////////////////////////////////////////////////////////////////// 055 { 056 component.addMouseListener ( 057 new MouseAdapter ( ) 058 { 059 public void mousePressed ( MouseEvent mouseEvent ) 060 { 061 mousePressed = true; 062 } 063 } ); 064 065 component.addMouseMotionListener ( 066 new MouseMotionAdapter ( ) 067 { 068 public void mouseMoved ( MouseEvent mouseEvent ) 069 { 070 mousePoint = mouseEvent.getPoint ( ); 071 } 072 } ); 073 074 component.addKeyListener ( 075 new KeyAdapter ( ) 076 { 077 public void keyPressed ( KeyEvent keyEvent ) 078 { 079 InputAnimator.this.keyEvent = keyEvent; 080 } 081 } ); 082 083 component.requestFocus ( ); 084 } 085 086 ////////////////////////////////////////////////////////////////////// 087 ////////////////////////////////////////////////////////////////////// 088 089 public void update ( JComponent component ) 090 ////////////////////////////////////////////////////////////////////// 091 { 092 boolean repaintRequired = false; 093 094 if ( mousePoint != null ) 095 { 096 repaintRequired = true; 097 098 x = mousePoint.x; 099 100 y = mousePoint.y; 101 102 mousePoint = null; 103 } 104 105 if ( keyEvent != null ) 106 { 107 int keyCode = keyEvent.getKeyCode ( ); 108 109 switch ( keyCode ) 110 { 111 case KeyEvent.VK_DOWN: 112 case KeyEvent.VK_KP_DOWN: 113 114 repaintRequired = true; 115 116 y++; 117 118 break; 119 120 case KeyEvent.VK_UP: 121 case KeyEvent.VK_KP_UP: 122 123 repaintRequired = true; 124 125 y--; 126 127 break; 128 129 case KeyEvent.VK_LEFT: 130 case KeyEvent.VK_KP_LEFT: 131 132 repaintRequired = true; 133 134 x--; 135 136 break; 137 138 case KeyEvent.VK_RIGHT: 139 case KeyEvent.VK_KP_RIGHT: 140 141 repaintRequired = true; 142 143 x++; 144 145 break; 146 } 147 148 keyEvent = null; 149 } 150 151 if ( repaintRequired ) 152 { 153 component.repaint ( ); 154 } 155 } 156 157 public void paint ( 158 JComponent component, 159 Graphics2D graphics ) 160 ////////////////////////////////////////////////////////////////////// 161 { 162 graphics.setColor ( BACKGROUND_COLOR ); 163 164 graphics.fillRect ( 0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE ); 165 166 graphics.setColor ( FOREGROUND_COLOR ); 167 168 graphics.drawString ( TEXT, x, y ); 169 } 170 171 ////////////////////////////////////////////////////////////////////// 172 ////////////////////////////////////////////////////////////////////// 173 }