JFrame Basics - potatoscript/JavaSwing GitHub Wiki

🖥️ JFrame Basics in Java Swing 🎨

🎯 What is JFrame?

JFrame is the main window for Java Swing applications. It provides the basic framework for adding GUI components such as buttons, labels, text fields, and other elements.

Key Features:

  • 🖼️ Window Creation: Main container where GUI components are added.
  • Close Operations: Handles application closing when the window is closed.
  • 🎨 Customizable Layouts: Supports layout managers to organize GUI components.
  • 🔥 Resizable & Draggable: Provides window resizing and dragging capabilities.

📚 Step 1: Creating a Basic JFrame

📝 Basic Syntax

import javax.swing.JFrame;

public class MyFrame {
    public static void main(String[] args) {
        // Create JFrame
        JFrame frame = new JFrame("My First JFrame");

        // Set frame size
        frame.setSize(400, 300);

        // Set default close operation
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Make the frame visible
        frame.setVisible(true);
    }
}

🎨 Explanation

JFrame frame = new JFrame("My First JFrame");

  • Creates a new JFrame with the title "My First JFrame".

frame.setSize(400, 300);

  • Sets the width to 400 pixels and height to 300 pixels.

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  • Closes the application when the window is closed.
  • Options available:
    • JFrame.EXIT_ON_CLOSE – Exit the application.
    • JFrame.HIDE_ON_CLOSE – Hide the window but keep the application running.
    • JFrame.DISPOSE_ON_CLOSE – Close the window but release only the resources of that frame.

frame.setVisible(true);

  • Displays the window on the screen.

👩‍🎨 Output:

+------------------------+
|                        |
|  My First JFrame        |
|                        |
+------------------------+

🎨 Step 2: JFrame with Basic Components


📝 Adding JLabel to JFrame

import javax.swing.*;

public class MyFrame {
    public static void main(String[] args) {
        // Create JFrame
        JFrame frame = new JFrame("JFrame with Label");

        // Create JLabel
        JLabel label = new JLabel("🎉 Welcome to Swing!", SwingConstants.CENTER);

        // Add label to frame
        frame.add(label);

        // Set frame size and behavior
        frame.setSize(400, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

🎨 Explanation

JLabel label = new JLabel("🎉 Welcome to Swing!", SwingConstants.CENTER);

  • Creates a label with the text "🎉 Welcome to Swing!" and centers it horizontally.

frame.add(label);

  • Adds the label to the frame.

frame.setSize(400, 200);

  • Sets the window size to 400x200 pixels.

👩‍🎨 Output:

+--------------------------------+
|                                |
|    🎉 Welcome to Swing!        |
|                                |
+--------------------------------+

🧩 Step 3: JFrame Properties and Methods


📝 Common JFrame Methods

Method Description Example Code
setSize(int width, int height) Sets the frame size in pixels. frame.setSize(500, 300);
setTitle(String title) Sets the title of the frame. frame.setTitle("My Frame");
setVisible(boolean b) Makes the frame visible or hidden. frame.setVisible(true);
setDefaultCloseOperation(int operation) Sets what happens when the window closes. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(boolean b) Enables/disables frame resizing. frame.setResizable(false);
setLocation(int x, int y) Sets frame position on the screen. frame.setLocation(200, 100);
setLocationRelativeTo(null) Centers the frame on the screen. frame.setLocationRelativeTo(null);
pack() Automatically sizes the frame to fit components. frame.pack();
dispose() Closes the frame and releases resources. frame.dispose();

📦 Step 4: Adding More Swing Components


🔥 Example: Adding Multiple Components to JFrame

import javax.swing.*;

public class MyFrame {
    public static void main(String[] args) {
        // Create JFrame
        JFrame frame = new JFrame("Multiple Components Example");

        // Create JLabel
        JLabel label = new JLabel("Enter your name:");

        // Create JTextField
        JTextField textField = new JTextField(20);

        // Create JButton
        JButton button = new JButton("Submit");

        // Set layout
        frame.setLayout(new java.awt.FlowLayout());

        // Add components to frame
        frame.add(label);
        frame.add(textField);
        frame.add(button);

        // Set frame properties
        frame.setSize(300, 150);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

🎨 Explanation

JLabel label = new JLabel("Enter your name:");

  • Displays the text "Enter your name:".

JTextField textField = new JTextField(20);

  • Creates a text field with a width of 20 columns.

JButton button = new JButton("Submit");

  • Creates a button with the text "Submit".

frame.setLayout(new java.awt.FlowLayout());

  • Sets a simple layout that arranges components in a row.

frame.add(label);

  • Adds components to the frame.

👩‍🎨 Output:

+--------------------------------+
| Enter your name:  ___________  |
|                                |
|         [Submit]               |
+--------------------------------+

🎮 Step 5: JFrame Layout Managers


🎛️ What is a Layout Manager?

A Layout Manager controls the arrangement and positioning of components within a JFrame.

Layout Manager Description Usage Example
FlowLayout Arranges components in a row. frame.setLayout(new FlowLayout());
BorderLayout Divides the frame into 5 regions. frame.setLayout(new BorderLayout());
GridLayout Arranges components in a grid. frame.setLayout(new GridLayout(2, 2));
BoxLayout Arranges components vertically/horizontally. frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
GridBagLayout Advanced layout for complex GUIs. frame.setLayout(new GridBagLayout());

🎨 Example: Using BorderLayout

import javax.swing.*;
import java.awt.*;

public class BorderLayoutExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("BorderLayout Example");

        // Create buttons
        JButton button1 = new JButton("NORTH");
        JButton button2 = new JButton("SOUTH");
        JButton button3 = new JButton("EAST");
        JButton button4 = new JButton("WEST");
        JButton button5 = new JButton("CENTER");

        // Set BorderLayout
        frame.setLayout(new BorderLayout());

        // Add buttons to regions
        frame.add(button1, BorderLayout.NORTH);
        frame.add(button2, BorderLayout.SOUTH);
        frame.add(button3, BorderLayout.EAST);
        frame.add(button4, BorderLayout.WEST);
        frame.add(button5, BorderLayout.CENTER);

        // Set frame properties
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

🎨 Output:

+--------------------------+
|         NORTH             |
+------+------------+-------+
| WEST |   CENTER    | EAST  |
+------+------------+-------+
|         SOUTH             |
+--------------------------+

🚀 Step 6: Handling Window Events in JFrame


📝 Handling Window Close Events

import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class WindowEventExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Window Event Example");

        // Add Window Listener
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.out.println("Window is closing!");
                System.exit(0);
            }
        });

        frame.setSize(400, 200);
        frame.setVisible(true);
    }
}

👩‍🎨 Explanation

  • addWindowListener(new WindowAdapter() { ... }) – Listens for window events.
  • windowClosing() – Called when the window is about to close.

🎁 Bonus: Center JFrame on Screen

To center a JFrame on the screen:

frame.setLocationRelativeTo(null);

✅ Add this line before frame.setVisible(true);.