GameFrame.java - Window Setup

The GameFrame class extends JFrame to create the main game window with proper configuration for the Pong game.

Purpose: Sets up the game window, configures display properties, and integrates the game panel.

Source Code

 1import java.awt.*;
 2import javax.swing.*;
 3
 4public class GameFrame extends JFrame{
 5
 6    GamePanel panel;
 7    
 8    GameFrame(){
 9        panel = new GamePanel();
10        this.add(panel);
11        this.setTitle("Pong Game");
12        this.setResizable(false);
13        this.setBackground(Color.black);
14        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
15        this.pack();
16        this.setVisible(true);
17        this.setLocationRelativeTo(null);
18    }
19}

Code Analysis

Inheritance Structure

1public class GameFrame extends JFrame

Extends JFrame: Inherits all the functionality of a standard Swing window, including:

  • Window decorations (title bar, close button)
  • Event handling capabilities
  • Layout management
  • Visibility control

Constructor Breakdown

The constructor sets up the entire game window in a specific sequence:

Step 1: Create Game Panel
1panel = new GamePanel();
2this.add(panel);
  • Creates the main game component where all gameplay happens
  • Adds it to the frame using the default BorderLayout center position
  • The GamePanel handles all game logic, rendering, and input
Step 2: Window Properties
1this.setTitle("Pong Game");
2this.setResizable(false);
3this.setBackground(Color.black);
  • Title: Sets the window title bar text
  • Resizable: Prevents users from changing window size (maintains game proportions)
  • Background: Sets window background to black (matches game aesthetic)
Step 3: Application Behavior
1this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Defines what happens when user clicks the ‘X’ button:

  • EXIT_ON_CLOSE: Terminates the entire application
  • Alternative options: HIDE_ON_CLOSE, DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE
Step 4: Size and Positioning
1this.pack();
2this.setVisible(true);
3this.setLocationRelativeTo(null);
  • pack(): Automatically sizes window to fit the preferred size of components
  • setVisible(true): Makes the window appear on screen
  • setLocationRelativeTo(null): Centers the window on the screen

Key Design Decisions

Fixed Size Window:

  • setResizable(false) ensures consistent game experience
  • Prevents display issues with collision detection and rendering
  • Game dimensions are fixed in GamePanel.GAME_WIDTH/HEIGHT

Automatic Sizing:

  • pack() method sizes window based on GamePanel.SCREEN_SIZE
  • No need to manually calculate window dimensions
  • Automatically accounts for window decorations

Immediate Startup:

  • Constructor handles complete setup
  • Game starts automatically when GameFrame is created
  • No additional method calls needed from main

Common JFrame Configuration Pattern

This class demonstrates a typical JFrame setup pattern:

1public class MyFrame extends JFrame {
2    public MyFrame() {
3        // 1. Add components
4        // 2. Set window properties  
5        // 3. Configure behavior
6        // 4. Size and show
7    }
8}

Window Management Best Practices

Order Matters: The sequence of method calls is important:

  1. Add components first
  2. Set properties
  3. Pack (size) the window
  4. Make visible last

Component Integration: The frame serves as a container for the GamePanel, delegating all game-specific functionality to the appropriate class.


Next: Explore GamePanel.java to see where the real game magic happens!