def init(self, aName, aDevice, aAllowedStates, aLogFile, aParent): from javax.swing import Timer #print ('TrackDevice.init ' + aName ) self.DeviceName = aName self.Device = aDevice self.DeviceValue = self.Device.getValue() self.AllowedStates = aAllowedStates self.parent = aParent self.LogFile = aLogFile self.timeoutListener = self.TimeoutReceiver() self.timeoutListener.setCallBack(self.receiveTimeoutHandler) self.receiveTimer = Timer(1, self.timeoutListener) self.receiveTimer.stop() self.receiveTimer.setRepeats(False) self.sendTimeoutListener = self.TimeoutReceiver() self.sendTimeoutListener.setCallBack(self.sendTimeoutHandler) self.sendTimer = Timer(1, self.sendTimeoutListener) self.sendTimer.stop() self.sendTimer.setRepeats(False) self.pauseTimeoutListener = self.TimeoutReceiver() self.pauseTimeoutListener.setCallBack(self.pauseTimeoutHandler) self.pauseTimer = Timer(1, self.pauseTimeoutListener) self.pauseTimer.stop() self.pauseTimer.setRepeats(False) self.relayClicks = jmri.jmrit.Sound( "resources/sounds/Code-receive.wav") #self.relayClicks = jmri.jmrit.Sound(jmri.util.FileUtil.getExternalFilename("preference:resources/sounds/EnhancedCTCRelay.wav")) self.relaySend = jmri.jmrit.Sound("resources/sounds/Code-send.wav") return
def init(self, aName, aDevice, aAllowedStates, aLogFile, aParent): from javax.swing import Timer self.DeviceName = aName self.Device = aDevice self.DeviceNumber = self.DeviceName[2:self.DeviceName.find(":")] self.AllowedStates = aAllowedStates self.parent = aParent self.DeviceValue = self.AllowedStates[0] self.LogFile = aLogFile self.timeoutListener = self.TimeoutReceiver() self.timeoutListener.setCallBack(self.receiveTimeoutHandler) self.receiveTimer = Timer(100, self.timeoutListener) self.receiveTimer.setInitialDelay(10) self.receiveTimer.stop() self.receiveTimer.setRepeats(False) self.sendTimeoutListener = self.TimeoutReceiver2() self.sendTimeoutListener.setCallBack(self.sendTimeoutHandler) self.sendTimer = Timer(100, self.timeoutListener) self.sendTimer.setInitialDelay(10) self.sendTimer.stop() self.sendTimer.setRepeats(False) self.pauseTimeoutListener = self.TimeoutReceiver() self.pauseTimeoutListener.setCallBack(self.pauseTimeoutHandler) self.pauseTimer = Timer(100, self.pauseTimeoutListener) self.pauseTimer.setInitialDelay(10) self.pauseTimer.stop() self.pauseTimer.setRepeats(False) self.finalTimeoutListener = self.TimeoutReceiver() self.finalTimeoutListener.setCallBack(self.finalTimeoutHandler) self.finalTimer = Timer(100, self.finalTimeoutListener) self.finalTimer.setInitialDelay(10) self.finalTimer.stop() self.finalTimer.setRepeats(False) # self.relayClicks = jmri.jmrit.Sound(jmri.util.FileUtil.getExternalFilename("preference:resources/sounds/EnhancedCTCRelayTrimmed.wav")) self.relayClicks = jmri.jmrit.Sound( "resources/sounds/Code-receive.wav") self.relaySend = jmri.jmrit.Sound("resources/sounds/Code-send.wav") return
def init(self): self.getContext().addPropertyChangeListener( self) #ThrottleFrame change self.addressPanel = self.getContext().getCurrentThrottleFrame( ).getAddressPanel() self.addressPanel.addAddressListener( self) # change of throttle in Current frame self.throttle = self.getContext().getCurrentThrottleFrame( ).getAddressPanel().getThrottle() # the throttle self.speedAction = SpeedAction() #Speed increase thread self.speedAction.setThrottle(self.throttle) self.speedTimer = Timer( valueSpeedTimerRepeat, self.speedAction ) # Very important to use swing Timer object (see Swing and multithreading doc) self.speedTimer.setRepeats(True) self.label = JButton( ImageIcon(self.getFolder() + "/WiimoteThrottle2.png", "WiiMote")) #label self.label.addMouseListener( self.getMouseListeners() [0]) # In order to get the popupmenu on the button too self.add(self.label) self.lastTimeButton1 = Calendar.getInstance().getTimeInMillis() self.lastTimeButton2 = Calendar.getInstance().getTimeInMillis() self.advFunctions = AdvFunctions() self.lastTimeEStop = Calendar.getInstance().getTimeInMillis() self.wiiDevice = None self.sync = thread.allocate_lock() # A lock protecting bellow self.evt self.evt = None java.lang.System.setProperty("bluecove.jsr82.psm_minimum_off", "true") # Required for Bluecove + WiiRemoteJ WiiRemoteJ.findRemotes(self, 1) # Search for 1 Wiimote, and call back
def init(self): self.getContext().addPropertyChangeListener(self) #ThrottleFrame change self.getContext().getCurrentThrottleFrame().getAddressPanel().addAddressListener(self) # change of throttle in Current frame self.addressPanel = self.getContext().getCurrentThrottleFrame().getAddressPanel() self.throttle = self.addressPanel.getThrottle() # the throttle self.roster = self.addressPanel.getRosterEntry() # roster entry if any self.speedAction = SpeedAction() #Speed increase thread self.speedAction.setThrottle( self.throttle ) self.speedTimer = Timer(valueSpeedTimerRepeat, self.speedAction ) # Very important to use swing Timer object (see Swing and multithreading doc) self.speedTimer.setRepeats(True) self.label = JButton(ImageIcon(self.getFolder() + "/USBControl.png","USBThrottle")) #label self.label.addMouseListener(self.getMouseListeners()[0]) # In order to get the popupmenu on the button too self.add(self.label) self.model = jmri.jmrix.jinput.TreeModel.instance() # USB self.desiredController = None self.ctrlMenuItem = [] self.USBDriver = None self.driver = None mi = JCheckBoxMenuItem ("None") self.getPopUpMenu().add( mi ) mi.addItemListener( ControllerItemListener(None, self) ) self.ctrlMenuItem.append(mi) for ctrl in self.model.controllers(): mi = JCheckBoxMenuItem (ctrl.getName()) self.getPopUpMenu().add( mi ) mi.addItemListener( ControllerItemListener(ctrl, self) ) self.ctrlMenuItem.append(mi) if ( len(self.ctrlMenuItem) == 0 ): print "No matching USB device found" else: self.ctrlMenuItem[0].setSelected(True) # by default connect to the first one self.model.addPropertyChangeListener(self) self.lastTimeStopButton = Calendar.getInstance().getTimeInMillis() self.lastTimeCruiseButton = Calendar.getInstance().getTimeInMillis()
def initUI(self): self.addKeyListener(KA(lambda k: k)) self.xp = 0 self.yp = 0 self.canvas = Canvas(lambda g: self.mypaint(g), lambda x, y: self.myclick(x, y)) self.canvas.setBackground(Color(200, 200, 100)) self.getContentPane().add(self.canvas) self.setTitle("Ball") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setSize(300, 300) self.setLocationRelativeTo(None) self.setBackground(Color(255, 255, 255)) self.setVisible(True) self.timer = Timer(50, self) self.timer.start()
def initGame(self): self.left = False self.right = True self.up = False self.down = False self.inGame = True self.dots = 3 for i in range(self.dots): x[i] = 50 - i * 10 y[i] = 50 self.locateApple() self.timer = Timer(DELAY, self) self.timer.start()
def highlightTab(self): currentPane = self._splitpane previousPane = currentPane while currentPane and not isinstance(currentPane, JTabbedPane): previousPane = currentPane currentPane = currentPane.getParent() if currentPane: index = currentPane.indexOfComponent(previousPane) currentPane.setBackgroundAt(index, Color(0xff6633)) class setColorBackActionListener(ActionListener): def actionPerformed(self, e): currentPane.setBackgroundAt(index, Color.BLACK) timer = Timer(5000, setColorBackActionListener()) timer.setRepeats(False) timer.start()
def __init__(self, delay): self.frame = JFrame("SVT Monitor", \ windowClosing = lambda event: sys.exit(0)) self.grid = GridLayout(2, 4) self.pane = self.frame.contentPane self.pane.layout = self.grid self.buttonList = map(lambda x: JButton("b0svt0" + `x`), \ [0,7,6,5,1,2,3,4]) # Left to right, # top to bottom for button in self.buttonList: button.actionCommand = button.text button.addActionListener(self) self.pane.add(button) self.crateMonitorList = [] self.frame.pack() self.frame.visible = 1 self.timer = Timer(delay, self) self.timer.start()
def initUI(self): self.addKeyListener(KA(lambda k: self.mykey(k))) self.xp = 0 self.yp = 0 self.canvas = Canvas(lambda g: self.mypaint(g), lambda x, y: self.myclick(x, y), lambda x, y: self.my_move(x, y)) self.canvas.setBackground(JavaColor(200, 200, 100)) self.getContentPane().add(self.canvas) self.setTitle("Test") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.xSize = 500 self.ySize = 500 self.setSize(self.xSize, self.ySize) self.setLocationRelativeTo(None) self.setBackground(JavaColor(255, 255, 255)) self.setVisible(True) #self.button = JButton("This is a button") #self.add(self.button, BorderLayout.SOUTH) #self.button.addActionListener(self) self.timer = Timer(50, self) self.timer.start()
def init(self): """ generated source for method init """ setSize(500, 500) addMouseListener(self) addMouseMotionListener(self) # initialize the biped to a valid state: state = [ 0.463, 0.98, 0.898, -0.229, 0.051, 0.276, -0.221, -1.430, -0.217, 0.086, 0.298, -3.268, -0.601, 3.167, 0.360, 0.697, 0.241, 3.532 ] self.bip7.setState(state) delay = 1 # milliseconds taskPerformer = ActionListener() self.timer = Timer(delay, taskPerformer) self.timer.start() self.tempBuffer = BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB) initComponents() self.con = Controller() self.con.addWalkingController() self.con.addRunningController() self.con.addCrouchWalkController() self.addKeyListener(self) self.requestFocus()
def __init__(self, numRows, numCols): self.numRows = numRows self.numCols = numCols self.timer = Timer(250, None, actionPerformed=self._step)
def __init__(self, frame, name): self.frame = frame self.exception = None self.name = name self.searchTerm = None self.searchIndex = -1 self.searchField = JTextField("") self.searchField.addActionListener(SearchListener(self)) self.newGeneFrom = JTextField("") self.newGeneTo = JTextField("") self.newGeneButton = JButton("New Gene") newGeneActionListener = NewGeneActionListener(self) self.newGeneFrom.addActionListener(newGeneActionListener) self.newGeneTo.addActionListener(newGeneActionListener) self.newGeneButton.addActionListener(newGeneActionListener) self.markForRemovalButton = JButton("Mark For Removal") self.markForRemovalButton.addActionListener( MarkForRemovalListener(self)) self.inGenes = JList(DefaultListModel()) self.inGenes.selectionMode = ListSelectionModel.SINGLE_SELECTION self.inGenes.cellRenderer = ProfelisCellRenderer() self.markButtonLabelerTimer = Timer(100, MarkButtonLabeler(self)) self.markButtonLabelerTimer.start() self.loadFile() self.outGenes = JList(DefaultListModel()) self.outGenes.selectionMode = ListSelectionModel.SINGLE_SELECTION self.outGenes.cellRenderer = ProfelisCellRenderer() constraints = GridBagConstraints() self.layout = GridBagLayout() constraints.gridx, constraints.gridy = 0, 0 constraints.gridwidth, constraints.gridheight = 1, 1 constraints.fill = GridBagConstraints.NONE constraints.weightx, constraints.weighty = 0, 0 self.add(JLabel("Genes In Artemis File"), constraints) constraints.gridx, constraints.gridy = 0, 1 self.add(JButton(RemoveAction(self)), constraints) constraints.gridx, constraints.gridy = 1, 1 self.add(self.markForRemovalButton, constraints) constraints.gridx, constraints.gridy = 2, 1 self.add(JLabel("Search"), constraints) constraints.gridx, constraints.gridy = 3, 1 constraints.fill = GridBagConstraints.HORIZONTAL self.add(self.searchField, constraints) constraints.gridx, constraints.gridy = 0, 2 constraints.gridwidth, constraints.gridheight = 4, 2 constraints.fill = GridBagConstraints.BOTH constraints.weightx, constraints.weighty = 1, 1 self.add(JScrollPane(self.inGenes), constraints) constraints.gridx, constraints.gridy = 4, 0 constraints.gridwidth, constraints.gridheight = 1, 1 constraints.fill = GridBagConstraints.NONE constraints.weightx, constraints.weighty = 0, 0 self.add(JLabel("Genes To Add To Artemis File"), constraints) constraints.gridx, constraints.gridy = 4, 1 self.add(self.newGeneButton, constraints) constraints.weightx = 1 constraints.fill = GridBagConstraints.BOTH constraints.gridx, constraints.gridy = 5, 1 self.add(self.newGeneFrom, constraints) constraints.weightx = 0 constraints.fill = GridBagConstraints.NONE constraints.gridx, constraints.gridy = 6, 1 self.add(JLabel("To"), constraints) constraints.weightx = 1 constraints.fill = GridBagConstraints.BOTH constraints.gridx, constraints.gridy = 7, 1 self.add(self.newGeneTo, constraints) constraints.weightx = 0 constraints.fill = GridBagConstraints.NONE constraints.gridx, constraints.gridy = 4, 2 self.add(JButton(AddGenesAction(self)), constraints) constraints.gridx, constraints.gridy = 4, 3 constraints.gridwidth, constraints.gridheight = 4, 1 constraints.fill = GridBagConstraints.BOTH constraints.weightx, constraints.weighty = 1, 1 self.add(JScrollPane(self.outGenes), constraints)
def __init__(self, event): self.event = event self.timer = Timer(0, self) self.repeat = True
# Handles the timer elapsed event def actionPerformed(self, e): for i in range(islandBlocks.size()): if (blocks.getBlock( islandBlocks.get(i)).getState() == jmri.Block.OCCUPIED): break else: print "Timer Fired" listener.StopGradeCrossing() # Create the grade crossing listener listener = GradeCrossingListener() # Create a timer that calls its elapsed listener after a delay. Stops the grade # crossing after the delay if the island is not occupied by a train. timer = Timer(1000 * delay, timerElapsed()) # Add a PropertyChangeListner for each approach block and create the block if it # does not already exist. for i in range(approachBlocks.size()): blocks.provideBlock( approachBlocks.get(i)).addPropertyChangeListener(listener) # Add a PropertyChangeListner for each island block and create the block if it # does not already exist. for i in range(islandBlocks.size()): blocks.provideBlock( islandBlocks.get(i)).addPropertyChangeListener(listener)
class Simbicon(java, applet, Applet, MouseListener, MouseMotionListener, KeyListener): """ generated source for class Simbicon """ bip7 = Bip7() gnd = Ground() Dt = 0.00005 DtDisp = 0.0054 timeEllapsed = 0 # we'll use this buffered image to reduce flickering tempBuffer = BufferedImage() timer = Timer() # and the controller con = Controller() Md = float() Mdd = float() DesVel = 0 # if this variable is set to true, the simulation will be running, otherwise it won't simFlag = False simButton = javax.swing.JButton() reset = javax.swing.JButton() panel = javax.swing.JPanel() speedSlider = javax.swing.JSlider() label = javax.swing.JLabel() shouldPanY = False def init(self): """ generated source for method init """ setSize(500, 500) addMouseListener(self) addMouseMotionListener(self) # initialize the biped to a valid state: state = [ 0.463, 0.98, 0.898, -0.229, 0.051, 0.276, -0.221, -1.430, -0.217, 0.086, 0.298, -3.268, -0.601, 3.167, 0.360, 0.697, 0.241, 3.532 ] self.bip7.setState(state) delay = 1 # milliseconds taskPerformer = ActionListener() self.timer = Timer(delay, taskPerformer) self.timer.start() self.tempBuffer = BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB) initComponents() self.con = Controller() self.con.addWalkingController() self.con.addRunningController() self.con.addCrouchWalkController() self.addKeyListener(self) self.requestFocus() def boundRange(self, value, min, max): """ generated source for method boundRange """ if value < min: value = min if value > max: value = max return value # //////////////////////////////////////////////////////// # PROC: wPDtorq() # DOES: computes requires torque to move a joint wrt world frame # //////////////////////////////////////////////////////// def wPDtorq(self, torq, joint, dposn, kp, kd, world): """ generated source for method wPDtorq """ joint_posn = self.bip7.State[4 + joint * 2] joint_vel = self.bip7.State[4 + joint * 2 + 1] if world: # control wrt world frame? (virtual) joint_posn += self.bip7.State[4] # add body tilt joint_vel += self.bip7.State[5] # add body angular velocity torq[joint] = kp * (dposn - joint_posn) - kd * joint_vel # //////////////////////////////////////////////////////// # PROC: jointLimit() # DOES: enforces joint limits # //////////////////////////////////////////////////////// def jointLimit(self, torq, joint): """ generated source for method jointLimit """ kpL = 800 kdL = 80 minAngle = self.con.jointLimit[0][joint] maxAngle = self.con.jointLimit[1][joint] currAngle = self.bip7.State[4 + joint * 2] currOmega = self.bip7.State[4 + joint * 2 + 1] if currAngle < minAngle: torq = kpL * (minAngle - currAngle) - kdL * currOmega elif currAngle > maxAngle: torq = kpL * (maxAngle - currAngle) - kdL * currOmega return torq def bip7WalkFsm(self, torq): """ generated source for method bip7WalkFsm """ torsoIndex = 0 rhipIndex = 1 rkneeIndex = 2 lhipIndex = 3 lkneeIndex = 4 rankleIndex = 5 lankleIndex = 6 worldFrame = [False, True, False, True, False, False, False] self.con.stateTime += self.Dt s = self.con.state[self.con.fsmState] computeMdMdd() n = 0 while n < 7: target = self.boundRange(target, self.con.targetLimit[0][n], self.con.targetLimit[1][n]) self.wPDtorq(torq, n, target, self.con.kp[n], self.con.kd[n], worldFrame[n]) n += 1 self.con.advance(self.bip7) def bip7Control(self, torq): """ generated source for method bip7Control """ body = 0 stanceHip = int() swingHip = int() fallAngle = 60 n = 0 while n < 7: torq[n] = 0 n += 1 if not self.bip7.lostControl: self.bip7WalkFsm(torq) if self.con.state[self.con.fsmState].leftStance: stanceHip = 3 swingHip = 1 else: stanceHip = 1 swingHip = 3 if not self.con.state[self.con.fsmState].poseStance: torq[stanceHip] = -torq[body] - torq[swingHip] torq[0] = 0 n = 1 while n < 7: torq[n] = self.boundRange(torq[n], self.con.torqLimit[0][n], self.con.torqLimit[1][n]) self.jointLimit(torq[n], n) n += 1 def computeMdMdd(self): """ generated source for method computeMdMdd """ stanceFootX = self.bip7.getStanceFootXPos(self.con) self.Mdd = self.bip7.State[1] - self.DesVel self.Md = self.bip7.State[0] - stanceFootX def initComponents(self): """ generated source for method initComponents """ self.simButton = javax.swing.JButton() self.reset = javax.swing.JButton() self.panel = javax.swing.JPanel() self.label = javax.swing.JLabel() self.label.setText("Speed: ") self.speedSlider = javax.swing.JSlider() self.speedSlider.setMaximum(100) self.speedSlider.setMinimum(0) self.speedSlider.setToolTipText( "Adjust the speed of the simulation by adjusting this slider.") setLayout(BorderLayout()) self.panel.setLayout(FlowLayout()) add(self.panel, BorderLayout.NORTH) self.panel.add(self.label) self.panel.add(self.speedSlider) self.panel.add(self.simButton) self.panel.add(self.reset) self.speedSlider.addMouseListener(java.awt.event.MouseAdapter()) self.simButton.setText(" Start ") self.reset.setText("Reset") self.simButton.addActionListener(java.awt.event.ActionListener()) self.reset.addActionListener(java.awt.event.ActionListener()) def resetSimulation(self): """ generated source for method resetSimulation """ self.bip7.resetBiped() self.con.stateTime = 0 self.con.fsmState = 0 self.con.currentGroupNumber = 0 self.con.desiredGroupNumber = 0 repaint() def runLoop(self): """ generated source for method runLoop """ if self.simFlag == False: return self.timer.stop() i = 0 while i < 200: self.bip7.computeGroundForces(self.gnd) self.bip7Control(self.bip7.t) self.bip7.runSimulationStep(self.Dt) self.timeEllapsed += self.Dt if self.timeEllapsed > self.DtDisp: self.update(self.getGraphics()) self.timeEllapsed = 0 i += 1 self.timer.start() def update(self, g): """ generated source for method update """ if g == None: return g2 = self.tempBuffer.getGraphics() g2.setColor(Color(255, 255, 255)) g2.fillRect(0, 0, getSize().width - 1, getSize().height - 1) m = Matrix3x3.getTranslationMatrix(0, -300) m = m.multiplyBy(Matrix3x3.getScalingMatrix(float(100))) panX = self.bip7.State[0] panY = self.bip7.State[2] if self.shouldPanY == False: panY = 0 m = m.multiplyBy( Matrix3x3.getTranslationMatrix(-panX + 1.5, -panY + 0.5)) self.bip7.drawBiped(g2, m) self.gnd.draw(g2, m) g.drawImage(self.tempBuffer, 0, self.panel.getHeight(), self) self.panel.repaint() def paint(self, g): """ generated source for method paint """ self.update(g) self.panel.repaint() def keyReleased(self, e): """ generated source for method keyReleased """ def keyPressed(self, e): """ generated source for method keyPressed """ if e.getKeyCode() == e.VK_LEFT: self.bip7.PushTime = 0.2 self.bip7.PushForce = -60 if e.getKeyCode() == e.VK_RIGHT: self.bip7.PushTime = 0.2 self.bip7.PushForce = 60 if e.getKeyChar() == 'r' or e.getKeyChar() == 'R': self.con.desiredGroupNumber = 1 if e.getKeyChar() == 'w' or e.getKeyChar() == 'W': self.con.desiredGroupNumber = 0 if e.getKeyChar() == 'c' or e.getKeyChar() == 'C': self.con.desiredGroupNumber = 2 if e.getKeyChar() == '1': self.gnd.getFlatGround() self.resetSimulation() if e.getKeyChar() == '2': self.gnd.getComplexTerrain() self.resetSimulation() def keyTyped(self, e): """ generated source for method keyTyped """ def mouseDragged(self, e): """ generated source for method mouseDragged """ def mouseMoved(self, e): """ generated source for method mouseMoved """ def mousePressed(self, e): """ generated source for method mousePressed """ self.requestFocus() def mouseReleased(self, e): """ generated source for method mouseReleased """ def mouseEntered(self, e): """ generated source for method mouseEntered """ def mouseExited(self, e): """ generated source for method mouseExited """ def mouseClicked(self, e): """ generated source for method mouseClicked """ def destroy(self): """ generated source for method destroy """ removeMouseListener(self) removeMouseMotionListener(self) def getAppletInfo(self): """ generated source for method getAppletInfo """ return "Title: Simbicon\n" + "Author: Stelian Coros, Michiel van de Panne."
The getMissiles() method returns the list of missiles. It is called from the Board class. Board.java package com.zetcode; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.List; import javax.swing.JPanel; import javax.swing.Timer; public class Board extends JPanel implements ActionListener { private final int ICRAFT_X = 40; private final int ICRAFT_Y = 60; private final int DELAY = 10; private Timer timer; private SpaceShip spaceShip; public Board() { initBoard(); } private void initBoard() { addKeyListener(new TAdapter()); setBackground(Color.BLACK); setFocusable(true); spaceShip = new SpaceShip(ICRAFT_X, ICRAFT_Y); timer = new Timer(DELAY, this); timer.start(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); doDrawing(g); Toolkit.getDefaultToolkit().sync(); } private void doDrawing(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.drawImage(spaceShip.getImage(), spaceShip.getX(), spaceShip.getY(), this); List<Missile> missiles = spaceShip.getMissiles(); for (Missile missile : missiles) { g2d.drawImage(missile.getImage(), missile.getX(), missile.getY(), this); } } @Override public void actionPerformed(ActionEvent e) { updateMissiles(); updateSpaceShip(); repaint(); } private void updateMissiles() { List<Missile> missiles = spaceShip.getMissiles(); for (int i = 0; i < missiles.size(); i++) { Missile missile = missiles.get(i); if (missile.isVisible()) { missile.move(); } else { missiles.remove(i); } } } private void updateSpaceShip() { spaceShip.move(); } private class TAdapter extends KeyAdapter { @Override public void keyReleased(KeyEvent e) { spaceShip.keyReleased(e); } @Override public void keyPressed(KeyEvent e) { spaceShip.keyPressed(e); } } } This is the Board class. private void doDrawing(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.drawImage(spaceShip.getImage(), spaceShip.getX(), spaceShip.getY(), this); List<Missile> missiles = spaceShip.getMissiles(); for (Missile missile : missiles) { g2d.drawImage(missile.getImage(), missile.getX(), missile.getY(), this); } } In the doDrawing() method, we draw the craft and all the available missiles. private void updateMissiles() { List<Missile> missiles = spaceShip.getMissiles(); for (int i = 0; i < missiles.size(); i++) { Missile missile = missiles.get(i); if (missile.isVisible()) { missile.move(); } else { missiles.remove(i); } } } In the updateMissiles() method we parse all missiles from the missiles list. Depending on what the isVisible() method returns, we either move the missile or remove it from the container. ShootingMissilesEx.java package com.zetcode; import java.awt.EventQueue; import javax.swing.JFrame; public class ShootingMissilesEx extends JFrame { public ShootingMissilesEx() { initUI(); } private void initUI() { add(new Board()); setSize(400, 300); setResizable(false); setTitle("Shooting missiles"); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { EventQueue.invokeLater(() -> { ShootingMissilesEx ex = new ShootingMissilesEx(); ex.setVisible(true); }); } }
private final int DELAY = 10; public Board() { initBoard(); } private void initBoard() { addKeyListener(new TAdapter()); setBackground(Color.black); setFocusable(true); spaceShip = new SpaceShip(); timer = new Timer(DELAY, this); timer.start(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); doDrawing(g); Toolkit.getDefaultToolkit().sync(); } private void doDrawing(Graphics g) { Graphics2D g2d = (Graphics2D) g;
def __init__(self): from javax.swing import Timer self.timer = Timer(5000, self) self.timer.start()