diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/JavaSwingSimpleExercise.iml b/.idea/JavaSwingSimpleExercise.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/JavaSwingSimpleExercise.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..f03c948
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..2d16929
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/JavaSwingSimpleExercise/RegistrationFormApp.class b/out/production/JavaSwingSimpleExercise/RegistrationFormApp.class
new file mode 100644
index 0000000..f3c0363
Binary files /dev/null and b/out/production/JavaSwingSimpleExercise/RegistrationFormApp.class differ
diff --git a/out/production/JavaSwingSimpleExercise/images/img-4-1.png b/out/production/JavaSwingSimpleExercise/images/img-4-1.png
new file mode 100644
index 0000000..137d23f
Binary files /dev/null and b/out/production/JavaSwingSimpleExercise/images/img-4-1.png differ
diff --git a/out/production/JavaSwingSimpleExercise/images/img-4-2.png b/out/production/JavaSwingSimpleExercise/images/img-4-2.png
new file mode 100644
index 0000000..994d9db
Binary files /dev/null and b/out/production/JavaSwingSimpleExercise/images/img-4-2.png differ
diff --git a/out/production/JavaSwingSimpleExercise/images/img-4-3.png b/out/production/JavaSwingSimpleExercise/images/img-4-3.png
new file mode 100644
index 0000000..7cdaa57
Binary files /dev/null and b/out/production/JavaSwingSimpleExercise/images/img-4-3.png differ
diff --git a/out/production/JavaSwingSimpleExercise/readme-part-4.md b/out/production/JavaSwingSimpleExercise/readme-part-4.md
new file mode 100644
index 0000000..2b65f53
--- /dev/null
+++ b/out/production/JavaSwingSimpleExercise/readme-part-4.md
@@ -0,0 +1,132 @@
+## Exercise 4: User Registration Form Application
+
+### Description & Goal
+
+Design a comprehensive registration form using `GridBagLayout`. Students will arrange multiple Swing components—text fields, password field, radio buttons, checkboxes, and a submit button—in a responsive grid. The goal is to practice advanced layout management and component integration.
+
+### Code Breakdown
+
+**Part 1: Field Declarations**
+Define all UI components and layout constraints.
+
+```java
+public class RegistrationFormApp extends JFrame implements ActionListener {
+ private JTextField txtName; // User name input
+ private JTextField txtEmail; // User email input
+ private JPasswordField txtPassword; // Password input
+ private JRadioButton rbMale, rbFemale; // Gender selection
+ private JCheckBox cbJava, cbPython, cbCpp; // Interests selection
+ private JButton btnSubmit; // Submit form button
+ private GridBagConstraints gbc; // Layout constraints
+}
+```
+
+*Explanation:* We declare fields for name, email, and password inputs; radio buttons for gender; checkboxes for interests; a submit button; and `GridBagConstraints` for positioning.
+
+**Part 2: Constructor Setup**
+Initialize components, configure `GridBagLayout`, and add items.
+
+```java
+public RegistrationFormApp() {
+ setTitle("User Registration");
+ setSize(500, 350);
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ setLocationRelativeTo(null);
+
+ JPanel panel = new JPanel(new GridBagLayout());
+ gbc = new GridBagConstraints();
+ gbc.insets = new Insets(5, 5, 5, 5);
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+
+ // Row 0: Name label & field
+ gbc.gridx = 0; gbc.gridy = 0;
+ panel.add(new JLabel("Name:"), gbc);
+ gbc.gridx = 1;
+ txtName = new JTextField(20);
+ panel.add(txtName, gbc);
+
+ // Row 1: Email label & field
+ gbc.gridx = 0; gbc.gridy = 1;
+ panel.add(new JLabel("Email:"), gbc);
+ gbc.gridx = 1;
+ txtEmail = new JTextField(20);
+ panel.add(txtEmail, gbc);
+
+ // Row 2: Password label & field
+ gbc.gridx = 0; gbc.gridy = 2;
+ panel.add(new JLabel("Password:"), gbc);
+ gbc.gridx = 1;
+ txtPassword = new JPasswordField(20);
+ panel.add(txtPassword, gbc);
+
+ // Row 3: Gender selection
+ gbc.gridx = 0; gbc.gridy = 3;
+ panel.add(new JLabel("Gender:"), gbc);
+ gbc.gridx = 1;
+ rbMale = new JRadioButton("Male"); rbFemale = new JRadioButton("Female");
+ ButtonGroup bg = new ButtonGroup(); bg.add(rbMale); bg.add(rbFemale);
+ JPanel genderPanel = new JPanel(); genderPanel.add(rbMale); genderPanel.add(rbFemale);
+ panel.add(genderPanel, gbc);
+
+ // Row 4: Interests selection
+ gbc.gridx = 0; gbc.gridy = 4;
+ panel.add(new JLabel("Interests:"), gbc);
+ gbc.gridx = 1;
+ cbJava = new JCheckBox("Java"); cbPython = new JCheckBox("Python"); cbCpp = new JCheckBox("C++");
+ JPanel interestPanel = new JPanel();
+ interestPanel.add(cbJava); interestPanel.add(cbPython); interestPanel.add(cbCpp);
+ panel.add(interestPanel, gbc);
+
+ // Row 5: Submit button
+ gbc.gridx = 1; gbc.gridy = 5;
+ gbc.anchor = GridBagConstraints.CENTER;
+ btnSubmit = new JButton("Submit");
+ btnSubmit.addActionListener(this);
+ panel.add(btnSubmit, gbc);
+
+ add(panel);
+}
+```
+
+*Explanation:* We configure `GridBagLayout` with padding, add labels and inputs sequentially by grid coordinates, and group related radio and checkbox components in sub-panels.
+
+**Part 3: Event Handling**
+Collect input values on submit and display them.
+
+```java
+@Override
+public void actionPerformed(ActionEvent e) {
+ String name = txtName.getText();
+ String email = txtEmail.getText();
+ String gender = rbMale.isSelected() ? "Male" : rbFemale.isSelected() ? "Female" : "Unspecified";
+ String interests = "";
+ if (cbJava.isSelected()) interests += "Java ";
+ if (cbPython.isSelected()) interests += "Python ";
+ if (cbCpp.isSelected()) interests += "C++ ";
+
+ JOptionPane.showMessageDialog(this,
+ "Name: " + name + "\n" +
+ "Email: " + email + "\n" +
+ "Gender: " + gender + "\n" +
+ "Interests: " + interests,
+ "Registration Details", JOptionPane.INFORMATION_MESSAGE);
+}
+```
+
+*Explanation:* On button press, we read each field's value, determine selected options, and show a summary dialog.
+
+**Part 4: Application Entry Point**
+Run the form on the Swing event thread.
+
+```java
+public static void main(String[] args) {
+ SwingUtilities.invokeLater(() -> new RegistrationFormApp().setVisible(true));
+}
+```
+
+*Explanation:* Ensures safe creation and display of the GUI on the Event Dispatch Thread.
+---
+### output of the code:
+
+
+
diff --git a/part-1/ClickCounterApp.java b/part-1/ClickCounterApp.java
new file mode 100644
index 0000000..65fb9b0
--- /dev/null
+++ b/part-1/ClickCounterApp.java
@@ -0,0 +1,37 @@
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class ClickCounterApp extends JFrame implements ActionListener {
+ private JLabel counterLabel; // Displays the click count
+ private JButton clickButton; // Button to register clicks
+ private int count = 0; // Stores the current count
+
+
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(() -> {
+ JFrame frame = new ClickCounterApp();
+ frame.setSize(300, 300);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ });
+ }
+ public ClickCounterApp() {
+ setTitle("Click Counter");
+ counterLabel = new JLabel("Clicks: 0", SwingConstants.CENTER);
+ clickButton = new JButton("Click Me");
+ clickButton.addActionListener(this);
+
+ setLayout(new BorderLayout());
+ add(counterLabel, BorderLayout.CENTER);
+ add(clickButton, BorderLayout.SOUTH);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ count++; // Increment the click counter
+ counterLabel.setText("Clicks: " + count);
+ }
+}
\ No newline at end of file
diff --git a/part-1/E1.java b/part-1/E1.java
deleted file mode 100644
index e69de29..0000000
diff --git a/part-2/E2.java b/part-2/E2.java
deleted file mode 100644
index e69de29..0000000
diff --git a/part-2/GreetingFormApp.java b/part-2/GreetingFormApp.java
new file mode 100644
index 0000000..453e583
--- /dev/null
+++ b/part-2/GreetingFormApp.java
@@ -0,0 +1,49 @@
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class GreetingFormApp extends JFrame implements ActionListener {
+ private JTextField nameField; // Field for user input
+ private JButton greetButton; // Button to trigger greeting
+ private JLabel messageLabel; // Label to display greeting
+
+
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(() -> {
+ JFrame frame = new GreetingFormApp();
+ frame.setSize(300, 300);
+ frame.setLocationRelativeTo(null);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setVisible(true);
+ });
+ }
+
+ public GreetingFormApp() {
+ setTitle("Greeting Form");
+ nameField = new JTextField(15);
+ greetButton = new JButton("Greet");
+ messageLabel = new JLabel("Enter your name and press Greet.", SwingConstants.CENTER);
+
+ greetButton.addActionListener(this);
+
+ JPanel inputPanel = new JPanel();
+ inputPanel.add(new JLabel("Name:"));
+ inputPanel.add(nameField);
+ inputPanel.add(greetButton);
+
+ setLayout(new BorderLayout());
+ add(inputPanel, BorderLayout.NORTH);
+ add(messageLabel, BorderLayout.CENTER);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String name = nameField.getText().trim();
+ if (name.isEmpty()) {
+ messageLabel.setText("Please enter a name.");
+ } else {
+ messageLabel.setText("Hello, " + name + "!");
+ }
+ }
+}
\ No newline at end of file
diff --git a/part-3/E3.java b/part-3/E3.java
deleted file mode 100644
index e69de29..0000000
diff --git a/part-3/ThemeColorSelectorApp.java b/part-3/ThemeColorSelectorApp.java
new file mode 100644
index 0000000..3360f2b
--- /dev/null
+++ b/part-3/ThemeColorSelectorApp.java
@@ -0,0 +1,57 @@
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class ThemeColorSelectorApp extends JFrame implements ActionListener {
+ private JPanel mainPanel; // The panel whose background will change
+ private JButton redButton; // Button to select red theme
+ private JButton greenButton; // Button to select green theme
+ private JButton blueButton; // Button to select blue theme
+
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(() -> {
+ JFrame frame = new ThemeColorSelectorApp();
+ frame.setSize(300, 300);
+ frame.setLocationRelativeTo(null);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setVisible(true);
+ });
+ }
+
+ public ThemeColorSelectorApp() {
+ setTitle("Theme Color Selector");
+
+ mainPanel = new JPanel();
+
+ redButton = new JButton("Red");
+ greenButton = new JButton("Green");
+ blueButton = new JButton("Blue");
+
+ redButton.setActionCommand("RED");
+ greenButton.setActionCommand("GREEN");
+ blueButton.setActionCommand("BLUE");
+
+ redButton.addActionListener(this);
+ greenButton.addActionListener(this);
+ blueButton.addActionListener(this);
+
+ JPanel buttonPanel = new JPanel();
+ buttonPanel.add(redButton);
+ buttonPanel.add(greenButton);
+ buttonPanel.add(blueButton);
+
+ setLayout(new BorderLayout());
+ add(buttonPanel, BorderLayout.NORTH);
+ add(mainPanel, BorderLayout.CENTER);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ switch (e.getActionCommand()) {
+ case "RED": mainPanel.setBackground(Color.RED); break;
+ case "GREEN": mainPanel.setBackground(Color.GREEN); break;
+ case "BLUE": mainPanel.setBackground(Color.BLUE); break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/part-4/E4.java b/part-4/E4.java
deleted file mode 100644
index e69de29..0000000
diff --git a/part-4/RegistrationFormApp.java b/part-4/RegistrationFormApp.java
new file mode 100644
index 0000000..3f3d1a8
--- /dev/null
+++ b/part-4/RegistrationFormApp.java
@@ -0,0 +1,102 @@
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class RegistrationFormApp extends JFrame implements ActionListener {
+ private JTextField txtName; // User name input
+ private JTextField txtEmail; // User email input
+ private JPasswordField txtPassword; // Password input
+ private JRadioButton rbMale, rbFemale; // Gender selection
+ private JCheckBox cbJava, cbPython, cbCpp; // Interests selection
+ private JButton btnSubmit; // Submit form button
+ private GridBagConstraints gbc; // Layout constraints
+
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(() -> {
+ JFrame frame = new RegistrationFormApp();
+ frame.setSize(300, 300);
+ frame.setLocationRelativeTo(null);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setVisible(true);
+ });
+ }
+
+ public RegistrationFormApp() {
+ setTitle("User Registration");
+ setSize(500, 350);
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ setLocationRelativeTo(null);
+
+ JPanel panel = new JPanel(new GridBagLayout());
+ gbc = new GridBagConstraints();
+ gbc.insets = new Insets(5, 5, 5, 5);
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+
+ // Row 0: Name label & field
+ gbc.gridx = 0; gbc.gridy = 0;
+ panel.add(new JLabel("Name:"), gbc);
+ gbc.gridx = 1;
+ txtName = new JTextField(20);
+ panel.add(txtName, gbc);
+
+ // Row 1: Email label & field
+ gbc.gridx = 0; gbc.gridy = 1;
+ panel.add(new JLabel("Email:"), gbc);
+ gbc.gridx = 1;
+ txtEmail = new JTextField(20);
+ panel.add(txtEmail, gbc);
+
+ // Row 2: Password label & field
+ gbc.gridx = 0; gbc.gridy = 2;
+ panel.add(new JLabel("Password:"), gbc);
+ gbc.gridx = 1;
+ txtPassword = new JPasswordField(20);
+ panel.add(txtPassword, gbc);
+
+ // Row 3: Gender selection
+ gbc.gridx = 0; gbc.gridy = 3;
+ panel.add(new JLabel("Gender:"), gbc);
+ gbc.gridx = 1;
+ rbMale = new JRadioButton("Male"); rbFemale = new JRadioButton("Female");
+ ButtonGroup bg = new ButtonGroup(); bg.add(rbMale); bg.add(rbFemale);
+ JPanel genderPanel = new JPanel(); genderPanel.add(rbMale); genderPanel.add(rbFemale);
+ panel.add(genderPanel, gbc);
+
+ // Row 4: Interests selection
+ gbc.gridx = 0; gbc.gridy = 4;
+ panel.add(new JLabel("Interests:"), gbc);
+ gbc.gridx = 1;
+ cbJava = new JCheckBox("Java"); cbPython = new JCheckBox("Python"); cbCpp = new JCheckBox("C++");
+ JPanel interestPanel = new JPanel();
+ interestPanel.add(cbJava); interestPanel.add(cbPython); interestPanel.add(cbCpp);
+ panel.add(interestPanel, gbc);
+
+ // Row 5: Submit button
+ gbc.gridx = 1; gbc.gridy = 5;
+ gbc.anchor = GridBagConstraints.CENTER;
+ btnSubmit = new JButton("Submit");
+ btnSubmit.addActionListener(this);
+ panel.add(btnSubmit, gbc);
+
+ add(panel);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String name = txtName.getText();
+ String email = txtEmail.getText();
+ String gender = rbMale.isSelected() ? "Male" : rbFemale.isSelected() ? "Female" : "Unspecified";
+ String interests = "";
+ if (cbJava.isSelected()) interests += "Java ";
+ if (cbPython.isSelected()) interests += "Python ";
+ if (cbCpp.isSelected()) interests += "C++ ";
+
+ JOptionPane.showMessageDialog(this,
+ "Name: " + name + "\n" +
+ "Email: " + email + "\n" +
+ "Gender: " + gender + "\n" +
+ "Interests: " + interests,
+ "Registration Details", JOptionPane.INFORMATION_MESSAGE);
+ }
+}
\ No newline at end of file