/** @version 1.0 2018-04-10 @author Agustín J. González */ import java.awt.*; import javax.swing.*; import java.awt.event.*; /* El Método main aquí mostrado tiene dos implementaciones, una de ellas está comentada. Las componentes de Swing deben ser configuradas desde la hebra despachadora de eventos, ésta es la hebra que pasa los eventos tales como clicks del mouse, teclas, etc a las componentes de la interfaz usuario. Es posible utilizar la versión comentada para iniciar la interfaz usuario; sin embargo, las componetes de Swing aumentaron su complejidad y hoy no garantiza una buena inicialización usando la antigua estructura de main. La probabilida de problemas es baja, pero no querrás ser de aquellos sin suerte que enfrentan problemas intermitentes. Es mejor usar este mecanismo aún cuando el código luzca extraño. */ public class RobotTest { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { // implementación Swing recomendada public void run() { WorldFrame frame = new WorldFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } // run ends }); } /* // esta implementación no es recomendada cuando usamos Swing public static void main(String[] args) { WorldFrame frame = new WorldFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } */ } /** A frame containing a panel for testing a Robot */ class WorldFrame extends JFrame { public WorldFrame() { setTitle("World Test"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // add panel to frame WorldPanel panel = new WorldPanel(); Container contentPane = getContentPane(); contentPane.add(panel); } public static final int DEFAULT_WIDTH = 600; public static final int DEFAULT_HEIGHT = 400; } /** A panel where the robot moves. */ class WorldPanel extends JPanel implements ActionListener { public WorldPanel() { robot = new Robot(this, 0, WorldFrame.DEFAULT_HEIGHT*0.9f); timer = new Timer(100, this); timer.start(); } public void actionPerformed(ActionEvent event){ robot.move(); repaint(); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; robot.draw(g2); } private Robot robot; private Timer timer; }