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 componentssetVisible(true)
: Makes the window appear on screensetLocationRelativeTo(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 onGamePanel.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:
- Add components first
- Set properties
- Pack (size) the window
- 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!