Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions .idea/JavaSwingSimpleExercise.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions expretions.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
starting to work with swing
Binary file added out/production/JavaSwingSimpleExercise/E4.class
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
132 changes: 132 additions & 0 deletions out/production/JavaSwingSimpleExercise/readme-part-4.md
Original file line number Diff line number Diff line change
@@ -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:
<img src="images/img-4-1.png" alt="..." width="400"/>
<img src="images/img-4-2.png" alt="..." width="400"/>
<img src="images/img-4-3.png" alt="..." width="400"/>
29 changes: 29 additions & 0 deletions part-1/ClickApp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ClickApp extends JFrame implements ActionListener {
private JLabel clickLabel;
private JButton clickButton;
private int counter = 0;

public ClickApp() {
setTitle("Click App");
clickButton = new JButton("click Me");
clickLabel = new JLabel("click : 0", SwingConstants.CENTER);
clickButton.addActionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 400);

setLayout(new BorderLayout());
add(clickButton, BorderLayout.SOUTH);
add(clickLabel, BorderLayout.CENTER);
}

@Override
public void actionPerformed(ActionEvent event) {
counter++;
clickLabel.setText("click : " + counter);
}
}
8 changes: 8 additions & 0 deletions part-1/E1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import javax.swing.*;

public class E1 {

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ClickApp().setVisible(true));
}
}
8 changes: 8 additions & 0 deletions part-2/E2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import javax.swing.*;

public class E2 {

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new GreetingApp().setVisible(true));
}
}
45 changes: 45 additions & 0 deletions part-2/GreetingApp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GreetingApp extends JFrame implements ActionListener {
private JLabel appLabel;
private JButton greetingButton;
private TextField nameField;
private final JLabel sticker;

public GreetingApp() {
setSize(400, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setTitle("Greeting Form");
sticker = new JLabel("NAME :", SwingConstants.LEFT);
nameField = new TextField(15);
appLabel = new JLabel("Enter your name and greet", SwingConstants.CENTER);
greetingButton = new JButton("Greet");

greetingButton.addActionListener(this);

JPanel appPanel = new JPanel();

appPanel.add(sticker);
appPanel.add(nameField);
appPanel.add(greetingButton);

setLayout(new BorderLayout());
add(appPanel, BorderLayout.NORTH);
add(appLabel, BorderLayout.CENTER);

}

@Override
public void actionPerformed(ActionEvent event) {
String name = nameField.getText().trim();
if (!name.isEmpty()) {
appLabel.setText("hello " + name);
}else {
appLabel.setText("hello " + name + " !");
}
}
}
52 changes: 52 additions & 0 deletions part-3/ColorApp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ColorApp extends JFrame implements ActionListener {
private JButton green;
private JButton blue;
private JButton red;
private JPanel panel;

public ColorApp() {
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("THEME COLOR APP");
setSize(400, 300);

panel = new JPanel();

green = new JButton("GREEN");
blue = new JButton("BLUE");
red = new JButton("red");

green.setActionCommand("green");
blue.setActionCommand("blue");
red.setActionCommand("red");

green.addActionListener(this);
blue.addActionListener(this);
red.addActionListener(this);

JPanel buttonPanel = new JPanel();
buttonPanel.add(green);
buttonPanel.add(blue);
buttonPanel.add(red);

setLayout(new BorderLayout());
add(panel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.NORTH);
}

@Override
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equalsIgnoreCase("green")){
panel.setBackground(Color.GREEN);
}else if (event.getActionCommand().equalsIgnoreCase("blue")) {
panel.setBackground(Color.BLUE);
} else if (event.getActionCommand().equalsIgnoreCase("red")) {
panel.setBackground(Color.RED);
}
}
}
8 changes: 8 additions & 0 deletions part-3/E3.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import javax.swing.*;

public class E3 {

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ColorApp().setVisible(true));
}
}
8 changes: 8 additions & 0 deletions part-4/E4.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import javax.swing.*;

public class E4 {

public static void main(String[] args) {
SwingUtilities.invokeLater(() ->new RegistrationApp().setVisible(true));
}
}
Loading