View Full Version : سوال: اضافه کردن event->mouseclicked در netbeans
securelinprog
سه شنبه 18 اسفند 1388, 09:25 صبح
سلام
من در netbeans یک java Application درست کرده ام. در واسط کاربری آن یک menu اضافه کرده ام و در زیر مجموعه File گزینه Save را قرار داده ام.
سپس بک action برای mouseclicked اضافه کردم ولی وقتی بر روی آن کلیک می کنم، هیچ اتفاقی نمی افتد؟!
من این کار را با استفاده از GUI Designer که در netbeans هست انجام دادم.
jlover
سه شنبه 18 اسفند 1388, 16:15 عصر
بدون کد که نمیشه نظر قطعی داد...
ولی به احتمال زیاد مربوط به شنودگری میشه که پیاده سازی و ثبت شده برای کمپوننت مورد نظر...
ولی صبر کنید
موضوع اینه که JMenuItem یا معادلش در awt اصلن MouseEvent تولید نمیکنه،بلکه ActioinEvent تولید میکنه
securelinprog
سه شنبه 18 اسفند 1388, 17:22 عصر
فکر نمی کنم نیازی به کد باشه ولی اگر فکر می کنید لازمه می توانم آن را بگذارم چون من یک MenuBar بوسیله GUI Designer در netbeans ایجاد کردم و سپس در زیر File یک منوی اضافه کردم سپس action مربوط به mouseclick را خواستم تنظیم کنم که به این مشکل برخوردم.
موضوع اینه که JMenuItem یا معادلش در awt اصلن MouseEvent تولید نمیکنه،بلکه ActioinEvent تولید میکنه ویرایشم تمام شد.
با توجه به این موضوع اگر بخواهم زمانی که کاربر بر روی یک JMenuItem کلیک کرد، متوجه شوم باید به جای MouseEvent از ActionEvent استفاده کنم!!!
راستی شما چگونه فهمیدید که ActionEvent تولید می کنه؟
jlover
سه شنبه 18 اسفند 1388, 18:33 عصر
ویرایشم تمام شد.
یعنی مشکلتون بر طرف شد ؟
راستی شما چگونه فهمیدید که ActionEvent تولید می کنه؟
مرجعی که یادگیری جاوا رو با اون شروع کردم* ، یه جدول داشت تو یه صفحه ی مربوط به مدل رویدادی جاوا که رویدادهای قابل تولید توسط هر مولفه رو آورده بود ( البته نمیدونم تا چه حد کامل بوده،چون کتاب مال 10 سال پیشه ! پس قطعن اگر در مستندات و خودآموزهای سان بگردید اطلاعات کاملتر و دقیقتری بدست میارید )
---------------------------------------------
*@ : « جاوا،جاوا،جاوا » ، ص 470 و 510 _ نگارش رالف مورلی،ترجمه ی هادی محمدزاده و علی جهانیان
securelinprog
سه شنبه 18 اسفند 1388, 18:58 عصر
یعنی مشکلتون بر طرف شد ؟نه هنوز مشکلم برطرف نشده. داشتم پستم را ویرایش می کردم. یه comment تو پستم دادم که اگه کسی دارد می خواند، صبر کنه. بعد که ویرایشم تمام شد، جمله «ویرایشم نمام شد را نوشتم». وگرنه هنوز مشکلم برطرف نشده است.
من سعی کردم با ActionEvent این کار را انجام دهم ولی نشد:
saveMenuItem = new javax.swing.JMenuItem();
saveMenuItem.setText("Save..");
saveMenuItem.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.ActionEvent evt) {
saveMenuItemMouseClicked(evt);
}
});
fileMenu.add(saveMenuItem);
بعد تابع saveMenuItemMouseClicked را نیز تعریف کردم ولی وارد این تابع نمی شد. یعنی هنوز نمی توان Event را دریافت کرد.
private void saveMenuItemMouseClicked(ActionEvent evt)
{
JOptionPane.showMessageDialog(null, "HELLO SAVE");
}
و این خیلی بد است.
کسی می دونه چگونه باید این مشکل را برطرف کرد؟
jlover
سه شنبه 18 اسفند 1388, 20:03 عصر
نشد دیگه
من که عرض کردم خدمتتون،فقره های منو رویداد ActionEvent تولید میکنند،از این رو باید شنودگر مربوطه رو برای فقره ی منوی مورد نظر ثبت کنید :
saveMenuItem.addActionListenerَ
مسئولیت رسیدگی به رویدادهای ActionEvent با شنودگر ActionListener هست که متد actionPerformed رو تعریف میکنه ، رویداد ActionEvent به متد ()actionPerformed فرستاده میشه
نکته ای که باید به خاطر بسپارید اینه که گرچه شما متد ()mouseClicked رو در MouseAdapter پیاده سازی کردید،اما این کجا و آن کجا ! پارامتر متدها متفاوته ( امضاهای متفاوت ) .
متد mouseClicked تنها زمانی فراخانی میشه که رویداد موس رخ داده باشه
securelinprog
جمعه 21 اسفند 1388, 10:36 صبح
متشکرم. مشکلم حل شد:
saveMenuItem = new javax.swing.JMenuItem();
saveMenuItem.setText("Save");
saveMenuItem.setToolTipText("save");
saveMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveMenuItemActionPerformed(evt);
}
});
fileMenu.add(saveMenuItem);
فقط یه سوال دیگه دارم در همین مورد.:
کسی می داند که چرا جاوا این کارو کرده؟ منظورم اینه که چرا MenuItem ها رویداد ActionEvent تولید می کنند و مثلا MouseEvent تولید نمی کنند؟
jlover
جمعه 21 اسفند 1388, 13:21 عصر
متشکرم. مشکلم حل شد:
saveMenuItem = new javax.swing.JMenuItem();
saveMenuItem.setText("Save");
saveMenuItem.setToolTipText("save");
saveMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveMenuItemActionPerformed(evt);
}
});
fileMenu.add(saveMenuItem);
فقط یه سوال دیگه دارم در همین مورد.:
کسی می داند که چرا جاوا این کارو کرده؟ منظورم اینه که چرا MenuItem ها رویداد ActionEvent تولید می کنند و مثلا MouseEvent تولید نمی کنند؟
خوشحالم که مشکلتون رو حل کردید
راجع به چیزی که میگم مطمئن نیستم،فقط تعبیر منه :
به نظر من میشه این تفاوت رو در اسم ها بررسی کرد ! یک Item ، معمولن یک ComboBox یا CheckBox ، choice یا امثال اینهاست که وجه مشترکشون تغییر حالت یا تغییر دادن مجموعه ای از انتخابهاست ، همونطور که متد واسط ItemListener رو با نام itemStateChanged میبینیم ، این متد زمانی فراخانی میشه که حالت یک مجموعه از فقره ( item ) ها تغییر میکنه . مثلن یک فقره ی دیگه در مجموعه ای از فقره ها که ممکنه به یک ChoiceBox یا RadioButton یا ... تعلق داشته باشه ، انتخاب میشه یا از حالت انتخاب در میاد
securelinprog
جمعه 21 اسفند 1388, 14:14 عصر
به نظر من هم چون منو ها می توانند نوع های مختلفی از جمله CheckBox یا RadioButton باشند و هم چنین این منو ها می توانند با طرق مختلفی از جمله Mouse یا Shortcut تغییر کنند، پس بهتر است که همه این Event ها را یکی بگیریم نه این که جدا جدا بگیریم مثلا از نوع MouseAdapter .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.