ایجاد رابط کاربری گرافیکی جاوا با اجزای Swing

این مقاله به بررسی جعبه ابزار جاوا Swing می پردازد. کتابخانه ای برای ساخت رابط های گرافیکی کاربر (GUI) با استفاده از مؤلفه هایی مانند JFrame، JDialog و JApplet که به عنوان کانتینرهای سطح بالا عمل می کنند. همچنین نحوه ایجاد یک فرم تماس ساده با استفاده از اجزای Swing را نشان می دهد.
Swing یک کتابخانه جاوا است که برای ایجاد رابط های گرافیکی ساده (GUI) استفاده می شود. این یک جعبه ابزار ویجت رابط کاربری گرافیکی است که مجموعه ای از اجزای سازنده را برای ساخت رابط کاربری گرافیکی ارائه می کند. (Oracle Docs، nda). اجزای Swing به طور کامل در زبان برنامه نویسی جاوا نوشته شده اند. سه کلاس کانتینر سطح بالا به طور کلی مفید وجود دارد: JFrame، JDialog، و JApplet (Oracle Docs، nd b).
ظرف سطح بالا:
الف JFrame یک پنجره سطح بالا با عنوان و حاشیه است.
(Oracle Docs, ndb, How to Make Frames (ویندوز اصلی).
الف JDialog پنجره یک پنجره فرعی مستقل است که به طور موقت جدا از پنجره اصلی Swing Application متوجه آن می شود.
(Oracle Docs, ndb, How to Make Dialogs)
“جاپلت، یک اپلت جاوا نوع خاصی از برنامه جاوا است که یک مرورگر فعال با فناوری جاوا می تواند از اینترنت دانلود و اجرا کند. یک اپلت معمولاً در داخل یک صفحه وب تعبیه شده است و در زمینه یک مرورگر اجرا می شود. یک اپلت باید زیر کلاس اپلت باشد. کلاس اپلت. کلاس Applet رابط استاندارد بین اپلت و محیط مرورگر را فراهم می کند (Oracle Docs, ndc).
هر برنامه ای که از اجزای Swing استفاده می کند حداقل یک ظرف سطح بالا را شامل می شود. این کانتینر سطح بالا به عنوان ریشه یک سلسله مراتب محفوظ است که تمام اجزای Swing درون ظرف را در بر می گیرد (Oracle Docs، ndb).
به طور معمول، یک برنامه مستقل با رابط کاربری گرافیکی مبتنی بر Swing حداقل یک سلسله مراتب محدود با یک JFrame به عنوان ریشه دارد. به عنوان مثال، اگر یک برنامه دارای یک پنجره اصلی و دو دیالوگ باشد، سه سلسله مراتب محتوی خواهد داشت که هر کدام دارای کانتینر سطح بالای خود هستند. پنجره اصلی دارای یک JFrame به عنوان ریشه است، در حالی که هر دیالوگ دارای JDialog به عنوان ریشه خواهد بود. یک اپلت مبتنی بر Swing همچنین حداقل یک سلسله مراتب محتوی دارد که یکی توسط یک شی JApplet ریشه دارد. به عنوان مثال، اپلتی که یک دیالوگ را نمایش می دهد دو سلسله مراتب محتوی دارد. اجزای داخل پنجره مرورگر متعلق به یک سلسله مراتب محفوظ است که توسط یک شی JApplet ریشه شده است، در حالی که گفتگو متعلق به یک سلسله مراتب حاوی ریشه شده توسط یک شی JDialog است.
کلاس JComponent:
به جز کانتینرهای سطح بالا، تمام اجزای Swing که با “J” شروع می شوند از کلاس JComponent مشتق شده اند. به عنوان مثال، JPanel، JScrollPane، JButton و JTable همگی از JComponent به ارث می برند. با این حال، JFrame و JDialog این کار را نمی کنند، زیرا کانتینرهای سطح بالایی هستند (Oracle Docs، ndb، The JComponent Class)
تفاوت قاب و پنل:
قاب:
JFrame یک کانتینر سطح بالا است که پنجره ای را با عنوان، حاشیه ها و دکمه ها نشان می دهد.
معمولاً به عنوان پنجره اصلی برنامه استفاده می شود.
یک JFrame می تواند شامل اجزای متعددی از جمله JPanel، JScrollPane، JButton، JTable و غیره باشد.
پنل:
JPanel یک کانتینر عمومی است که برای گروه بندی مجموعه ای از مؤلفه ها در یک پنجره استفاده می شود.
تزئینات پنجره مانند نوار عنوان یا دکمه بستن ندارد.
یک JPanel اغلب برای سازماندهی و مدیریت طرحبندی در JFrame استفاده میشود.
هر برنامه ای که از اجزای Swing استفاده می کند حداقل یک ظرف سطح بالا را شامل می شود. این کانتینر سطح بالا به عنوان ریشه یک سلسله مراتب محفوظ است که تمام اجزای Swing درون ظرف را در بر می گیرد (Oracle Docs، ndb).
به طور معمول، یک برنامه مستقل با رابط کاربری گرافیکی مبتنی بر Swing حداقل یک سلسله مراتب محدود با یک JFrame به عنوان ریشه دارد. به عنوان مثال، اگر یک برنامه دارای یک پنجره اصلی و دو دیالوگ باشد، سه سلسله مراتب محتوی خواهد داشت که هر کدام دارای کانتینر سطح بالای خود هستند. پنجره اصلی یک JFrame به عنوان ریشه دارد، در حالی که هر دیالوگ یک JDialog به عنوان ریشه خود دارد.
یک اپلت مبتنی بر Swing همچنین دارای حداقل یک سلسله مراتب محفوظ است که یکی از آنها توسط یک شی JApplet ریشه دارد. به عنوان مثال، اپلتی که یک دیالوگ را نمایش می دهد دو سلسله مراتب محتوی دارد. اجزای داخل پنجره مرورگر متعلق به یک سلسله مراتب محفوظ است که توسط یک شی JApplet ریشه دارد، در حالی که گفتگو متعلق به یک سلسله مراتب حاوی ریشه شده توسط یک شی JDialog است.
مثال زیر شامل یک JFrame و یک JPanel و همچنین اجزای اضافی مانند دکمهها، فیلدهای متنی و برچسبها با استفاده از GridBagLayout است. علاوه بر این، پیامی را با استفاده از JDialog، مؤلفه JOptionPane و مؤلفه پنجره Dialog نمایش می دهد. این یک فرم تماس ساده رابط کاربری گرافیکی (GUI) با استفاده از اجزای Swing است.
//--- Abstract Window Toolkit (AWT)
// Provides layout manager for arranging components in five regions:
// north, south, east, west, and center.
import java.awt.BorderLayout;
// Grid layout - Specifies constraints for components that are laid out using the GridBagLayout.
import java.awt.GridBagConstraints;
// Grid - layout manager that aligns components vertically and horizontally,
// without requiring the components to be of the same size.
import java.awt.GridBagLayout;
// Gird padding - Specifies the space (padding) between components and their borders.
import java.awt.Insets;
// Button - Provides the capability to handle action events like button clicks.
import java.awt.event.ActionEvent;
// Button event - Allows handling of action events, such as button clicks.
import java.awt.event.ActionListener;
//--- swing GUI
// Button - Provides a button component that can trigger actions when clicked.
import javax.swing.JButton;
// Frame - Provides a window with decorations
// such as a title, border, and buttons for closing and minimizing.
import javax.swing.JFrame;
// Labels - Provides a display area for a short text string or an image, or both.
import javax.swing.JLabel;
// Submition Message - Provides standard dialog boxes such as message, input, and confirmation dialogs.
import javax.swing.JOptionPane;
// Panel - Provides a generic container for grouping components together.
import javax.swing.JPanel;
// Scroll user message - Provides to the a scrollable view of a lightweight component.
import javax.swing.JScrollPane;
// User message - Provides a multi-line area to display/edit plain text.
import javax.swing.JTextArea;
// Name & Email - Provides a single-line text field for user input.
import javax.swing.JTextField;
/**
* This class generates a simple contact form. The form includes fields for the
* user's name, email, and message, and a submit button to submit the form.
*
* @author Alejandro Ricciardi
* @version 1.0
* @date 06/16/2024
*/
public class contactForm {
/**
* The main method to create and display the contact form.
*
* @param args Command line arguments
*/
public static void main(String[] args) {
/*------------
| Frame |
------------*/
// ---- Initializes frame
// Creates the main application frame
JFrame frame = new JFrame("Contact Form");
frame.setSize(400, 300); // Set the size of the frame
// Close the application when the frame is closed
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout()); // Use BorderLayout for the frame
/*------------
| Panel |
------------*/
// ---- Initializes panel
// Create a panel with GridBagLayout
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints gridForm = new GridBagConstraints();
gridForm.insets = new Insets(5, 5, 5, 5); // Add padding around components
// ---- Creates and adds grid components to the panel // -- Name
// Adds "Name" label
JLabel nameLabel = new JLabel("Name:");
gridForm.gridx = 0; // Position at column 0
gridForm.gridy = 0; // Position at row 0
panel.add(nameLabel, gridForm);
// Add text field for name input
JTextField nameField = new JTextField(20);
gridForm.gridx = 1; // Position at column 1
gridForm.gridy = 0; // Position at row 0
panel.add(nameField, gridForm);
// -- Email
// Add "Email" label
JLabel emailLabel = new JLabel("Email:");
gridForm.gridx = 0; // Position at column 0
gridForm.gridy = 1; // Position at row 1
panel.add(emailLabel, gridForm);
// Adds text field for email input
JTextField emailField = new JTextField(20);
gridForm.gridx = 1; // Position at column 1
gridForm.gridy = 1; // Position at row 1
panel.add(emailField, gridForm);
// Adds "Message" label
JLabel messageLabel = new JLabel("Message:");
gridForm.gridx = 0; // Position at column 0
gridForm.gridy = 2; // Position at row 2
panel.add(messageLabel, gridForm);
// -- Message
// Adds text area for message input with a scroll pane
JTextArea messageArea = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(messageArea);
gridForm.gridx = 1; // Position at column 1
gridForm.gridy = 2; // Position at row 2
panel.add(scrollPane, gridForm);
// Adds "Submit" button
JButton submitButton = new JButton("Submit");
gridForm.gridx = 1; // Position at column 1
gridForm.gridy = 3; // Position at row 3
panel.add(submitButton, gridForm);
// Adds the panel to the frame's center
frame.add(panel, BorderLayout.CENTER);
// Make the frame visible
frame.setVisible(true);
/*------------
| JDialog |
------------*/
// Add action listener to the submit button
ActionListener submitBtnClicked = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Display a message dialog when the submit button is clicked
JOptionPane.showMessageDialog(frame, "Message was sent!");
}
};
submitButton.addActionListener(submitBtnClicked);
}
}
اگر میخواهید درباره پنجرههای گفتگو بیشتر بدانید، ویدیوی زیر نحوه پیادهسازی پیام JDialog JOptionPane را شرح میدهد.
به طور خلاصه، جعبه ابزار جاوا Swing مجموعهای از مؤلفهها را ارائه میدهد که توسعهدهندگان را قادر میسازد تا رابط کاربری گرافیکی ساختار یافته بصری و کاربرپسند ایجاد کنند. این کتابخانه از کانتینرهای سطح بالا مانند JFrame، JDialog و JApplet در کنار عناصر ضروری مانند JPanel و JOptionPane استفاده می کند.
مراجع:
Oracle Docs. (nda). تاب. اوراکل. https://docs.oracle.com/javase/8/docs/technotes/guides/swing/
Oracle Docs. (ndb). استفاده از کانتینرهای سطح بالا آموزش های Java™. اوراکل. https://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html
Oracle Docs. (ndc). اپلت های جاوا آموزش های Java™. اوراکل. https://docs.oracle.com/javase/tutorial/deployment/applet/index.html
در ابتدا توسط Alex.omegapy در Medium در 3 نوامبر 2024 منتشر شد.