RobotFrame.java (13651B)
1 /* 2 Copyright 2008, 2009 Sebastiano Tronto <sebastiano@luganega.org> 3 4 This file is part of Robottino. 5 6 Robottino is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 Robottino is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with Robottino; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19 20 */ 21 22 import javax.swing.*; 23 import java.awt.event.*; 24 import java.awt.*; 25 26 public class RobotFrame extends JFrame implements ActionListener { 27 public static int numeroCopie, i; 28 public static Main main; 29 public static RobotPanel robotPanel; 30 public static Timer timer; 31 public static JMenuBar barraMenu; 32 public static JMenu file, modifica, azioni, info, raMenu, laMenu, rlMenu, llMenu; 33 public static JMenuItem raonMenuItem, raoffMenuItem, rachangeMenuItem, laonMenuItem, laoffMenuItem, lachangeMenuItem; 34 public static JMenuItem rlonMenuItem, rloffMenuItem, rlchangeMenuItem, llonMenuItem, lloffMenuItem, llchangeMenuItem; 35 public static JMenuItem rinomina, elimina, duplica, birra, balla, esplodi, informazioni; 36 RobotFrame( String titolo ) { 37 super ( titolo ); 38 numeroCopie = 0; 39 robotPanel = new RobotPanel( titolo ); 40 rinomina = new JMenuItem( "Cambia nome" ); 41 elimina = new JMenuItem( "Elimina" ); 42 duplica = new JMenuItem( "Duplica robot" ); 43 birra = new JMenuItem( "Birra" ); 44 balla = new JMenuItem( "Balla" ); 45 esplodi = new JMenuItem( "Esplodi" ); 46 informazioni = new JMenuItem( "Informazioni" ); 47 raonMenuItem = new JMenuItem( "Alza" ); 48 laonMenuItem = new JMenuItem( "Alza" ); 49 rlonMenuItem = new JMenuItem( "Alza" ); 50 llonMenuItem = new JMenuItem( "Alza" ); 51 raoffMenuItem = new JMenuItem( "Abbassa" ); 52 laoffMenuItem = new JMenuItem( "Abbassa" ); 53 rloffMenuItem = new JMenuItem( "Abbassa" ); 54 lloffMenuItem = new JMenuItem( "Abbassa" ); 55 rachangeMenuItem = new JMenuItem( "Cambia posizione" ); 56 lachangeMenuItem = new JMenuItem( "Cambia posizione" ); 57 rlchangeMenuItem = new JMenuItem( "Cambia posizione" ); 58 llchangeMenuItem = new JMenuItem( "Cambia posizione" ); 59 rinomina.addActionListener( this ); 60 elimina.addActionListener( this ); 61 duplica.addActionListener( this ); 62 birra.addActionListener( this ); 63 balla.addActionListener( this ); 64 esplodi.addActionListener( this ); 65 informazioni.addActionListener( this ); 66 raonMenuItem.addActionListener( this ); 67 raoffMenuItem.addActionListener( this ); 68 rachangeMenuItem.addActionListener( this ); 69 laonMenuItem.addActionListener( this ); 70 laoffMenuItem.addActionListener( this ); 71 lachangeMenuItem.addActionListener( this ); 72 rlonMenuItem.addActionListener( this ); 73 rloffMenuItem.addActionListener( this ); 74 rlchangeMenuItem.addActionListener( this ); 75 llonMenuItem.addActionListener( this ); 76 lloffMenuItem.addActionListener( this ); 77 llchangeMenuItem.addActionListener( this ); 78 raMenu = new JMenu( "Braccio destro" ); 79 raMenu.add( raonMenuItem ); 80 raMenu.add( raoffMenuItem ); 81 raMenu.add( rachangeMenuItem ); 82 laMenu = new JMenu( "Braccio sinistro" ); 83 laMenu.add( laonMenuItem ); 84 laMenu.add( laoffMenuItem ); 85 laMenu.add( lachangeMenuItem ); 86 rlMenu = new JMenu( "Gamba destra" ); 87 rlMenu.add( rlonMenuItem ); 88 rlMenu.add( rloffMenuItem ); 89 rlMenu.add( rlchangeMenuItem ); 90 llMenu = new JMenu( "Gamba sinistra" ); 91 llMenu.add( llonMenuItem ); 92 llMenu.add( lloffMenuItem ); 93 llMenu.add( llchangeMenuItem ); 94 modifica = new JMenu( "Modifica" ); 95 modifica.add( raMenu ); 96 modifica.add( laMenu ); 97 modifica.add( rlMenu ); 98 modifica.add( llMenu ); 99 file = new JMenu( "File" ); 100 file.add( rinomina ); 101 file.add( duplica ); 102 file.add( elimina ); 103 azioni = new JMenu( "Azioni" ); 104 azioni.add( birra ); 105 azioni.add( balla ); 106 azioni.add( esplodi ); 107 info = new JMenu( "?" ); 108 info.add( informazioni ); 109 barraMenu = new JMenuBar(); 110 barraMenu.add( file ); 111 barraMenu.add( azioni ); 112 barraMenu.add( modifica ); 113 barraMenu.add( info ); 114 setJMenuBar( barraMenu ); 115 add( robotPanel ); 116 } 117 public void actionPerformed( ActionEvent e ) { 118 esegui( e ); 119 } 120 public void esegui( ActionEvent e ) { 121 if ( e.getSource() == raonMenuItem ) 122 main.list.getRobot( this.getTitle() ).rightArm = true; 123 else if ( e.getSource() == raoffMenuItem ) 124 main.list.getRobot( this.getTitle() ).rightArm = false; 125 else if ( e.getSource() == rachangeMenuItem ) 126 main.list.getRobot( this.getTitle() ).rightArm = !main.list.getRobot( this.getTitle() ).rightArm; 127 else if ( e.getSource() == laonMenuItem ) 128 main.list.getRobot( this.getTitle() ).leftArm = true; 129 else if ( e.getSource() == laoffMenuItem ) 130 main.list.getRobot( this.getTitle() ).leftArm = false; 131 else if ( e.getSource() == lachangeMenuItem ) 132 main.list.getRobot( this.getTitle() ).leftArm = !main.list.getRobot( this.getTitle() ).leftArm; 133 else if ( e.getSource() == rlonMenuItem ) 134 main.list.getRobot( this.getTitle() ).rightLeg = true; 135 else if ( e.getSource() == rloffMenuItem ) 136 main.list.getRobot( this.getTitle() ).rightLeg = false; 137 else if ( e.getSource() == rlchangeMenuItem ) 138 main.list.getRobot( this.getTitle() ).rightLeg = !main.list.getRobot( this.getTitle() ).rightLeg; 139 else if ( e.getSource() == llonMenuItem ) 140 main.list.getRobot( this.getTitle() ).leftLeg = true; 141 else if ( e.getSource() == lloffMenuItem ) 142 main.list.getRobot( this.getTitle() ).leftLeg = false; 143 else if ( e.getSource() == llchangeMenuItem ) 144 main.list.getRobot( this.getTitle() ).leftLeg = !main.list.getRobot( this.getTitle() ).leftLeg; 145 else if ( e.getSource() == rinomina ) { 146 String newName = JOptionPane.showInputDialog( this, "Inserire il nuovo nome per questo robot:", this.getTitle() ); 147 if ( newName != null ) { 148 main.list.getRobot( this.getTitle() ).setName( newName ); 149 this.setTitle( newName ); 150 robotPanel.nomeRobot = newName; 151 } 152 } 153 else if ( e.getSource() == elimina ) { 154 int selezione = JOptionPane.showOptionDialog( this, "Eliminare il robottino " + this.getTitle() + " ?", "Robottino v4.1 - Cancellazione robottino", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { "Si", "No" }, "No" ); 155 if ( selezione == JOptionPane.YES_OPTION ) { 156 main.list.deleteRobot( this.getTitle() ); 157 this.dispose(); 158 } 159 } 160 else if ( e.getSource() == duplica ) { 161 String newName = JOptionPane.showInputDialog( this, "Inserire il nome per il nuovo robot:", this.getTitle() + " #" + (++numeroCopie) ); 162 if ( newName != null ) { 163 main.list.newRobot( main.list.getRobot( this.getTitle() ).leftArm, main.list.getRobot( this.getTitle() ).rightArm, main.list.getRobot( this.getTitle() ).leftLeg, main.list.getRobot( this.getTitle() ).rightLeg, newName ); 164 } 165 } 166 else if ( e.getSource() == birra ) { 167 ImageIcon birra = new ImageIcon( ClassLoader.getSystemResource( "img/birra5.gif" ) ); 168 JOptionPane.showMessageDialog( this, "", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE, birra ); 169 birra = new ImageIcon( ClassLoader.getSystemResource( "img/birra1.jpg" ) ); 170 JOptionPane.showMessageDialog( this, "", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE, birra ); 171 birra = new ImageIcon( ClassLoader.getSystemResource( "img/birra2.jpg" ) ); 172 JOptionPane.showMessageDialog( this, "", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE, birra ); 173 birra = new ImageIcon( ClassLoader.getSystemResource( "img/birra3.jpg" ) ); 174 JOptionPane.showMessageDialog( this, "", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE, birra ); 175 birra = new ImageIcon( ClassLoader.getSystemResource( "img/birra4.jpg" ) ); 176 JOptionPane.showMessageDialog( this, "", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE, birra ); 177 JOptionPane.showMessageDialog( this, "Che bevuta!", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE ); 178 JOptionPane.showMessageDialog( this, "Buuuuuuurp!", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE ); 179 robotPanel.body = new ImageIcon( ClassLoader.getSystemResource( "img/robot.gif" ) ); 180 } 181 else if ( e.getSource() == balla ) { 182 this.i = 0; 183 main.list.getRobot( this.getTitle() ).setPositions( false, false, false, false ); 184 timer = new Timer( 250, 185 new ActionListener() { 186 public void actionPerformed( ActionEvent e ) { 187 RobotFrame.this.i++; 188 switch( RobotFrame.this.i ) { 189 case 1: 190 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setRA( true ); 191 break; 192 case 2: 193 break; 194 case 3: 195 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setLA( true ); 196 break; 197 case 4: 198 break; 199 case 5: 200 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, false, true ); 201 break; 202 case 6: 203 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( true, true, false, false ); 204 break; 205 case 7: 206 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, true, false ); 207 break; 208 case 8: 209 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( true, true, false, false ); 210 break; 211 case 9: 212 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( true, false, false, true ); 213 break; 214 case 10: 215 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, false, false ); 216 break; 217 case 11: 218 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( true, false, false, true ); 219 break; 220 case 12: 221 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, true, true, false ); 222 break; 223 case 13: 224 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, false, false ); 225 break; 226 case 14: 227 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, true, true, false ); 228 break; 229 case 15: 230 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, false, false ); 231 break; 232 case 16: 233 break; 234 case 17: 235 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, true, false ); 236 break; 237 case 18: 238 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, false, true ); 239 break; 240 case 19: 241 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, true, false ); 242 break; 243 case 20: 244 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, false, true ); 245 break; 246 case 21: 247 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, true, false ); 248 break; 249 case 22: 250 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, false, true ); 251 break; 252 case 23: 253 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( true, true, true, true ); 254 break; 255 case 24: 256 break; 257 case 25: 258 break; 259 case 26: 260 RobotFrame.main.list.getRobot( RobotFrame.this.getTitle() ).setPositions( false, false, false, false ); 261 break; 262 case 27: 263 JOptionPane.showMessageDialog( RobotFrame.this, "Cha fatica!", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE ); 264 JOptionPane.showMessageDialog( RobotFrame.this, RobotFrame.this.getTitle() + " è tornato alla posizione di partenza", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE ); 265 break; 266 default: 267 timer.stop(); 268 break; 269 } 270 RobotFrame.robotPanel.setImages(); 271 RobotFrame.robotPanel.repaint(); 272 RobotFrame.this.repaint(); 273 } 274 } 275 ); 276 timer.start(); 277 } 278 if ( e.getSource() == esplodi ) { 279 String aux = this.getTitle(); 280 main.list.deleteRobot( this.getTitle() ); 281 this.dispose(); 282 ImageIcon boom = new ImageIcon( ClassLoader.getSystemResource( "img/boom.png" ) ); 283 JOptionPane.showMessageDialog( null, "", "Robottino v4.1", JOptionPane.PLAIN_MESSAGE, boom ); 284 JOptionPane.showMessageDialog( null, aux + " si è autodistrutto!", "Robottino v4.1", JOptionPane.WARNING_MESSAGE ); 285 } 286 if ( e.getSource() == informazioni ) { 287 String aux = this.getTitle() + ":\n\n"; 288 if ( main.list.getRobot( RobotFrame.this.getTitle() ).rightArm ) 289 aux += "Braccio destro: alzato\n"; 290 else 291 aux += "Braccio destro: abbassato\n"; 292 if ( main.list.getRobot( RobotFrame.this.getTitle() ).leftArm ) 293 aux += "Braccio sinistro: alzato\n"; 294 else 295 aux += "Braccio sinistro: abbassato\n"; 296 if ( main.list.getRobot( RobotFrame.this.getTitle() ).rightLeg ) 297 aux += "Gamba destra: alzata\n"; 298 else 299 aux += "Gamba destra: abbassata\n"; 300 if ( main.list.getRobot( RobotFrame.this.getTitle() ).leftLeg ) 301 aux += "Gamba sinistra: alzata\n"; 302 else 303 aux += "Gamba sinistra: abbassata\n"; 304 JOptionPane.showMessageDialog( this, aux, "Robottino - v4.1", JOptionPane.INFORMATION_MESSAGE ); 305 } 306 try { 307 robotPanel.setImages(); 308 robotPanel.repaint(); 309 repaint(); 310 } catch ( NullPointerException n ) { } 311 } 312 }