Dialog Box یک مؤلفه رابط کاربری ساده، اما رایج است و جاوا به شما امکان می دهد آنها را به روش های مختلف ایجاد کنید.
عملکرد اصلی یک جعبه محاوره ای این است که یک برنامه یا وب سایت مقداری ورودی را از کاربر بازیابی کند. این ورودی می تواند تصدیق این باشد که آنها پیامی را خوانده اند یا چیزی را که در قسمت متن وارد می کنند.
یک کادر محاوره ای بلافاصله توجه کاربر را به خود جلب می کند. این یک ابزار عالی برای جمع آوری یا نمایش اطلاعات مهم است.
جاوا یک زبان متنوع است که چندین کلاس را برای ایجاد کادر محاوره ای فراهم می کند. این کلاس ها عبارتند از JOptionPane، JDialog و JFrame.
کلاس JOptionPane
می توانید با استفاده از یکی از چندین روش استاتیک متعلق به کلاس JOptionPane یک کادر محاوره استاندارد ایجاد کنید. این شامل:
- showMessageDialog()، که پیامی را به کاربر ارسال می کند.
- showConfirmDialog()، که سوالی را می پرسد که نیاز به تایید دارد.
- showInputDialog()، که از کاربر برای ورودی می خواهد.
- showOptionDialog() که ترکیبی از سه روش دیگر است.
ایجاد یک کادر گفتگوی JOptionPane
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class JOptionPaneApp {
JOptionPaneApp() {
JFrame frame = new JFrame();
JOptionPane.showMessageDialog(frame, "This is a JOptionPane message window.");
}
public static void main(String[] args) {
new JOptionPaneApp();
}
}
کد بالا کادر محاوره ای زیر را ایجاد می کند:
اگرچه JOptionPane جعبههای محاورهای استاندارد را ارائه میکند، اما گزینههای زیادی دارد که به شما امکان میدهد رفتار آن را تغییر دهید. به عنوان مثال، گفتگوی پیام می تواند یکی از چندین نوع باشد. مورد بالا نمونه ای از INFORMATION_MESSAGE است که پیش فرض است. انواع دیگر پیام عبارتند از:
- پیغام خطا
- پیام هشدار
- QUESTION_MESSAGE
- PLAIN_MESSAGE
ایجاد پیام خطا
در اینجا مثالی از نحوه استفاده از یک نوع پیام متفاوت برای گفتگوی JOptionPane آورده شده است:
JOptionPane.showMessageDialog(frame, "This is a JOptionPane error message window.",
"Error", JOptionPane.ERROR_MESSAGE);
خط ()showMessageDialog در برنامه اصلی را با خط کد بالا جایگزین کنید و کادر گفتگوی خطای زیر را مشاهده خواهید کرد:
کلاس JDialog
کلاس JDialog به شما امکان می دهد کادرهای محاوره ای سفارشی ایجاد کنید. این کلاس جاوا متعلق به بسته javax.swing است و کلاس Dialog را گسترش می دهد. به طیف گسترده ای از روش های مستقیم و غیر مستقیم دسترسی دارد. این کلاس جاوا در مجموع دارای 16 سازنده جاوا می باشد.
به غیر از سازنده پیشفرض، هر یک از 15 مورد دیگر یک فریم، یک پنجره یا یک گفتگو با ترکیبی از چندین آرگومان دیگر میگیرد.
سازنده های اولیه JDialog عبارتند از:
- JDialog() یک کادر محاوره ای بدون قاب، عنوان یا حالت ایجاد می کند.
- JDialog (مالک گفتگو، عنوان رشته، مدال بولی) یک کادر محاوره ای با مالک دیالوگ، عنوان رشته و حالت ایجاد می کند.
- JDialog (صاحب فریم، عنوان رشته، مدال بولی) یک کادر محاوره ای با صاحب فریم، عنوان رشته و حالت ایجاد می کند.
- JDialog (مالک پنجره، عنوان رشته، مدال بولی) یک کادر محاوره ای با مالک پنجره، عنوان رشته و حالت ایجاد می کند.
ایجاد یک جعبه گفتگوی JDialog
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
public class JDialogApp {
JDialogApp() {
JFrame frame = new JFrame();
JDialog dialog = new JDialog(frame, true);
dialog.setLayout(new FlowLayout());
JLabel displayText = new JLabel("This is a JDialog window.");
JButton btn = new JButton("OK");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
}
});
dialog.add(displayText);
dialog.add(btn);
dialog.setSize(200,150);
dialog.setTitle("Dialog Window");
dialog.setVisible(true);
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String args[]) {
new JDialogApp();
}
}
کد بالا کادر محاوره ای زیر را ایجاد می کند:
چندین جنبه مهم از کد وجود دارد که باید به آنها توجه کنید. این برنامه از سازنده JDialog (مالک فریم، مدال بولی) استفاده می کند که یک JFrame و مقدار “true” را به عنوان آرگومان به آن ارسال می کند. JFrame مالک JDialog است، به این معنی که وظیفه نمایش کادر محاوره ای را بر عهده دارد. مقدار “true” به این معنی است که هنگام نمایش دیالوگ ورودی به سایر پنجره های مرتبط را مسدود می کند.
سازنده در کد بالا عنوانی را به عنوان آرگومان خود نمی گیرد. با این حال، صاحب فریم به عنوان نیاز دارد. بنابراین، برای این کار، میتوانید از متد setTitle() استفاده کنید که از طریق کلاس Dialog که JDialog گسترش میدهد در دسترس است. متدهای مهم دیگر در کد عبارتند از setVisible()، setSize() و setDefaultCloseOperation().
setVisible یک مقدار Boolean می گیرد و وظیفه نمایش فریم را بر عهده دارد. setSize ارتفاع و عرض پنجره محاوره ای را می گیرد. setDefaultCloseOperation یکی از سه مقدار را می گیرد تا تصمیم بگیرد که وقتی کاربر کادر گفتگو را می بندد چه اتفاقی می افتد.
کلاس JFrame
JDialog و JOptionPane هر دو از کلاس JFrame برای ایجاد کادر محاوره ای استفاده می کنند. با این حال، کلاس JFrame می تواند به تنهایی کادر محاوره ای ایجاد کند. کلاس JFrame کلاس Frame را گسترش می دهد و مانند کلاس JDialog به شما امکان می دهد کادرهای محاوره ای سفارشی ایجاد کنید.
JFrame دارای چهار سازنده و چندین روش مستقیم و غیرمستقیم است که برای ایجاد یک کادر محاوره ای باید از آنها استفاده کنید.
ایجاد یک کادر گفتگوی JFrame
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class JFrameApp {
JFrameApp() {
JFrame frame = new JFrame();
frame.setTitle("Dialog Window");
JPanel panel = new JPanel();
JLabel displayText = new JLabel("This is a JFrame window.");
panel.add(displayText);
JButton btn = new JButton("OK Button");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setVisible(false);
}
});
panel.add(btn);
frame.add(panel);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(250, 150);
frame.setVisible(true);
}
public static void main(String[] args) {
new JFrameApp();
}
}
کد بالا کادر محاوره ای زیر را ایجاد می کند:
کد از سازنده پیشفرض JFrame و چندین روش آشنا مانند متد setTitle() (که در برنامه JDialog بالا استفاده میشود) استفاده میکند. یک شی ناآشنا در برنامه بالا JPanel است که یک کانتینر عمومی است. این به JFrame انعطافپذیری میدهد تا چندین طرحبندی و مؤلفه را به یک فریم اضافه کند.
متدهای ActionListener() و actionPerformed() رویداد کلیک کاربر روی دکمه OK را مدیریت می کنند.
کدام کلاس جاوا برای ایجاد جعبه های گفتگو بهتر است؟
هدف واحد کلاس JOptionPane این است که فرآیند ایجاد کادر گفتگو را برای توسعه دهندگان جاوا راحت تر کند. با این حال، اگر به یک کادر محاورهای سفارشیتر نیاز دارید، کلاس JDialog بهترین گزینه بعدی است.
کلاس JFrame رابط کاربری ایجاد می کند، اما می توانید از آن برای ایجاد بسیاری از عناصر مختلف یک رابط کاربری گرافیکی، از جمله جعبه های محاوره ای استفاده کنید.
کادر محاوره ای ایجاد شده با کلاس JFrame دارای یک نماد کوچک شده است، در حالی که بقیه آیکون ندارند. اگر یک کادر محاورهای مدال میخواهید که کاربر باید قبل از تکمیل یک کار اقدام کند، JFrame بهترین روش نیست.