Una aplciacion casi full screen es una aplicacion que esta maximizada en pantalla, el cambio en el codigo es muy pequeño, asi tenemos:
1.1. The WormChase Class
Ahora le constructor debera calcular, no solo la nueva dimension, sino tambien la barra de tareas de windows y otros componentes swing en la ventana (los 2 textfields)
Modificaremos el constructor:
private int pWidth, pHeight; // dimensiones de el panel public WormChase(long period) { super("The Worm Chase"); makeGUI(); pack(); // primero (El GUI o incluye ek JPanel todavia) setResizable(false); // el tamaño podria variar si ponemos true calcSizes(); setResizable(true); Container c = getContentPane(); wp = new WormPanel(this, period, pWidth, pHeight); c.add(wp, "Center"); pack(); // segundo, despues de agregar a JPanel addWindowListener( this ); addComponentListener( new ComponentAdapter() { public void componentMoved(ComponentEvent e) /* Llamado por el ComponentListener cuando el jFrame es movido * . Lo pone todo en su sitio de nuevo*/ { setLocation(0,0); } }); setResizable(false); setVisible(true); } // fin de WormChase()
makegui() hace la GUI sin dibujarala:
private void makeGUI() // crea la GUI, Menos el area de dibujo (Jpanel) { Container c = getContentPane(); // BorderLayout usado por default JPanel ctrls = new JPanel(); // una fila de textfields ctrls.setLayout( new BoxLayout(ctrls, BoxLayout.X_AXIS)); jtfBox = new JTextField("Boxes used: 0"); jtfBox.setEditable(false); ctrls.add(jtfBox); jtfTime = new JTextField("Time Spent: 0 secs"); jtfTime.setEditable(false); ctrls.add(jtfTime); c.add(ctrls, "South"); } // fin de makeGUI()
calcSizes() inicializa 2 variables locales pWidth y pHeight, que luego pasan a WormPanel
private void calcSizes() /* Calcula el tamaño del panel de dibujo para llenar la pantalla, * deja espacio para los otros componentes de Jframe y la barra * de tareas del sistema operativo*/ { GraphicsConfiguration gc = getGraphicsConfiguration(); Rectangle screenRect = gc.getBounds(); // System.out.println("Screen size: " + screenRect); Toolkit tk = Toolkit.getDefaultToolkit(); Insets desktopInsets = tk.getScreenInsets(gc); // System.out.println("OS Insets: " + desktopInsets); Insets frameInsets = getInsets(); // funciona despues de llamar a pack() // System.out.println("JFrame Insets: " + frameInsets); Dimension tfDim = jtfBox.getPreferredSize(); // tamaño del textfield // System.out.println("Box TF Size: " + tfDim ); // System.out.println("Time TF Size: " + jtfTime.getPreferredSize() ); pWidth = screenRect.width - (desktopInsets.left + desktopInsets.right) - (frameInsets.left + frameInsets.right); pHeight = screenRect.height - (desktopInsets.top + desktopInsets.bottom) - (frameInsets.top + frameInsets.bottom) - tfDim.height; // System.out.println("pWidth: " + pWidth + "; pHeight: " + pHeight); } // fin de calcSizes()
1.2. Stopping Window Movement
El codigo para mover la ventana al centro siemrpe que se quiera mover es
addComponentListener( new ComponentAdapter() { public void componentMoved(ComponentEvent e) /* Llamado por el ComponentListener cuando el jFrame es movido * . Lo pone todo en su sitio de nuevo*/ { setLocation(0,0); } });
1.3. Timings for AFS
Calculos estadisticos para AFS, no los tomare en cuenta
1.4. Cambios en WormPanel
private long period; // periodo entre dibujos, en ms private int pWidth, pHeight; // dimensiones de el panel - - public WormPanel(WormChase wc, long period, int w, int h) { wcTop = wc; this.period = period; pWidth = w; pHeight = h; setBackground(Color.white); setPreferredSize( new Dimension(pWidth, pHeight)); setFocusable(true); requestFocus(); // El JPanel ahora es enfocado readyForTermination(); // crea componentes del juego obs = new Obstacles(wcTop); fred = new Worm(pWidth, pHeight, obs); gameOver = false; addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent e) { testPress(e.getX(), e.getY()); } }); // fuente del mensaje font = new Font("SansSerif", Font.BOLD, 24); metrics = this.getFontMetrics(font); fpsStore = new double[NUM_FPS]; upsStore = new double[NUM_FPS]; for (int i=0; i < NUM_FPS; i++) { fpsStore[i] = 0.0; upsStore[i] = 0.0; } } // fin de WormPanel()