خب به ایستگاه کلاس JFileChooser یکی دیگر از اجزای گرافیکی یا component های موجود در پکیج Swing جاوا رسیدیم. کلاس JFileChooser همان طور که از اسمش پیداست یک مکانیزم ساده است که انتخاب یک فایل در محلی از کامپیوتر توسط کاربر را فراهم می کند.
برای درک بهتر نسبت به شکل ظاهری این اجزای گرافیکی در برنامه تصویر(1) را مشاهده کنید:
• همان طور که در تصویر(1) مشاهده می کنید ، در کامپیوتر با FileChooser برای انتخاب فایل مورد نظر در محلی از کامپیوتر زیاد برخورد کرده ایم.
• برای استفاده از این کلاس در برنامه خود باید پکیج زیر را بالای کلاس برنامه خود import کنید:
import javax.swing.JFileChooser;
یا پکیج زیر رو نیز می توانید استفاده کنید:
import javax.swing.*;
• این پکیج همه کلاس های گرافیکی موجود در Swing جاوا را شامل می شود.
• سازنده های پرکاربرد کلاس JFileChooser :
توضیحات رو بیخیال! بریم سراغ مثال که چه چیزی بهتر از مثال:-)
public class FileChooserExample extends JFrame implements ActionListener { JMenuBarmb; JMenufile; JMenuItemopen; JTextAreata;
FileChooserExample() { open = new JMenuItem("Open File"); open.addActionListener(this); file = new JMenu("File"); file.add(open); mb = new JMenuBar(); mb.setBounds(0, 0, 800, 20); mb.add(file); ta = new JTextArea(800, 800); ta.setBounds(0, 20, 800, 800); add(mb); add(ta); }
public void actionPerformed(ActionEvent e) { if (e.getSource() == open) { JFileChooser fc = new JFileChooser(); int i = fc.showOpenDialog(this); if (i == JFileChooser.APPROVE_OPTION) { File f = fc.getselectedFile(); String filepath = f.getPath(); try { BufferedReader br = new BufferedReader(new FileReader( filepath)); String s1 = "", s2 = ""; while ((s1 = br.readLine()) != null) { s2 += s1 + "\n"; } ta.setText(s2); br.close(); } catch (Exception ex) { ex.printStackTrace(); } } } }
public static void main(String[] args) { FileChooserExample om = new FileChooserExample(); om.setSize(500, 500); om.setLayout(null); om.setVisible(true); om.setDefaultCloseOperation(EXIT_ON_CLOSE); } }
خروجی: تصاویر(2)و(3)و(4)
• در برنامه بالا ما یک فایل متنی با فرمت txt را باز کردیم و محتوای درون آن را داخل یک TextArea ریختیم.
توضیحات:
public class FileChooserExample extends JFrame implements ActionListener {
کلاس ما برای استفاده از متد actionPerformed اینترفیس ActionListener را implements کرده است.
1. open = new JMenuItem("Open File");
2. open.addActionListener(this);
3. file = new JMenu("File");
4. file.add(open);
5. mb = new JMenuBar();
6. mb.setBounds(0, 0, 800, 20);
7. mb.add(file);
8. ta = new JTextArea(800, 800);
9. ta.setBounds(0, 20, 800, 800);
10. add(mb);
11. add(ta);
• در سازنده کلاس خود موارد زیر را انجام داده ایم: ( توضیحات اشاره به شماره هر خط در کد بالا دارد)
1. ایجاد یک شی از نوع کلاس JMenuItem که رشته "Open File" را به عنوان پارامتر به سازنده ان داده ایم. شی از نوع این کلاس آیتم های منو ما را تشکیل می دهد.
2. به آیتم خود یک ActionListener اضاف کرده ایم که برای دریافت رویداد های مربوط به کلیک کردن روی آیتم مورد نظر استفاده می شود.
3. از کلاس JMenu نیز شی ساخته ایم. رشته "File" که نام منو ما را تشکیل می دهد را به عنوان پارامتر به سازنده این کلاس داده ایم.شی ایجاد شده از این کلاس نقش منو ما را بازی می کند.
4. آیتم منو خود را به منو موجود در منوبار اضاف کرده ایم.
5. از کلاس JMenuBar شی ایجاد کرده ایم. شی ایجاد شده از این کلاس نقش منوبار ما را بازی خواهد کرد.
6. تعیین ابعداد و مختصات منوبار
7. اضاف کردن منو به منوبار
8. ایجاد یک
9. تعیین ابعداد و مختصات TextArea
10. اضاف کردن منوبار به فریم
11. اضاف کردن TextArea به فریم
1. public void actionPerformed(ActionEvent e) { 2. if (e.getSource() == open) { 3. JFileChooser fc = new JFileChooser(); 4. inti = fc.showOpenDialog(this); 5. if (i == JFileChooser.APPROVE_OPTION) { 6. File f = fc.getselectedFile();
1. متد actionPerformed که وظیفه دریافت رویدادهای مربوط به اجزا یا component های گرافیکی را برعهده دارد . با هربار رویداد رخدادی خاص این متد صدا زده می شود و دستورات درون آن اجرا می شود.
2. این دستور منبع رویداد رخ داده در برنامه را پیدا میکند. و میگه اگر برابر شی open که از نوع کلاس JMenuItem هستش دستور مورد نظر را اجرا کند. دستور مورد نظر مربوط به شرط if
3. از کلاس JFileChooser شی ایجاد می کنیم.
int i = fc.showOpenDialog(this);
4. ما از FileChooser برای انتخاب فایل در محلی از کامپیوتر استفاده می کنیم در اینجا تعیین کرده ایم که قصد داریم فایل را باز کنیم ( بخوانیم) برای این کار از متد showOpenDialog که پارامتر آن از نوع کلاس Component هستش استفاده کرده ایم کلمه کلیدی this به شی از کلاسمون که component یا اجزای گرافیکی JFrame را به ارث برده است اشاره دارد. بعد از انتخاب فایل موجود در کامپیوتر متد showOpenDialog یک ایندکس از نوع عدد صحیح را برای ما برمیگرداند.
if (i == JFileChooser.APPROVE_OPTION) {
5. اینجا گفته ایندکسی که برگردانده شده اگر برابر مقدار JFileChooser.APPROVE_OPTION هستش دستور شرط رو اجرا کن.وقتی متد showOpenDialog صدا زده میشه پیام انتخاب فایل به صورت تصویر(6) نمایش داده می شود، با زدن دکمه open متد showOpenDialog مقدار 0 را برمی گرداند ، با زدن دکمه cancel متد showOpenDialog مقدار 1 را برمیگرداند. خب دستور ثابت JFileChooser.APPROVE_OPTION نیز حاوی مقدار0 می باشد که بیان گر موافقت در انتخاب فایل یا همان open کردن فایل می باشد. مثلا دستور ثابت مربوط به cancel کردن برابر JFileChooser.CANCEL_OPTION می باشد وقتی دکمه cancel را انتخاب میکنیم مقدار 1 برای ما برگردانده میشه که برابر دستور JFileChooser.CANCEL_OPTION می باشد.
نکته: متد showSaveDialog که درون کلاس JFileChooser می باشد برای نمایش پیام save کردن می باشد. تصویر(7)
6. حالا اگر انتخاب ما دکمه open بود فایل موجود در محل کامپیوتر خوانده میشه و درون یک شی از نوع کلاس File ریخته می شود.
با احترام خدمت شما
تشکر از وب سايت خوبي شما جهت ارايه آموزش ها
علی
چهارشنبه نوزدهم مهر ۹۶
پاسخ
()
()
سلام،من دارم یه برنامه مثل نوت پد خیلی ساده مینویسم. تو قسمت طراحی گزینه save مشکل دارم، می خوام وقتی گزینه save رو میزنم همه متن موجود تو text area تو یه فایل text که کاربر مسیر و نامشو انتخاب میکنه ذخیره بشه. میشه کمکم کنید؟