View Full Version : استفاده از شي به عنوان ورودي كلاس يا تابع
pouria_bayat
چهارشنبه 08 دی 1389, 23:20 عصر
سلام به همه اساتيد محترم.
سوالي داشتم منباب اينكه ايا امكان دارد يك شيئ را به عنوان پارامتر به يك تابع يا كلاس اعمال كنيم به طوري كه تغييراتي روي شي مورد نظر اعمال شود؟
به عنوان مثال فرض كنيد شما يك شي JPanel داريد با نام Sp كه از طريق netbeans روي فريم جاگذاري كرديد (كد نويسي new نكرديد)ايا امكانش هست كه اين Sp رو به يك تابع بفرستيم و در اون تابع مثلا يك عكس يا ... رو به اين JPanel اضافه بشه؟
اصلا ميشه يك كلاس يا تابع يك شي رو به عنوان ورودي بپذيره يا فقط ميتونه extends بشه از اشياء؟
ممنون ميشم اگر جواب بديد.
تشكر از زحماتتون.
javaphantom
پنج شنبه 09 دی 1389, 08:43 صبح
سلام به همه اساتيد محترم.
سوالي داشتم منباب اينكه ايا امكان دارد يك شيئ را به عنوان پارامتر به يك تابع يا كلاس اعمال كنيم به طوري كه تغييراتي روي شي مورد نظر اعمال شود؟
به عنوان مثال فرض كنيد شما يك شي JPanel داريد با نام Sp كه از طريق netbeans روي فريم جاگذاري كرديد (كد نويسي new نكرديد)ايا امكانش هست كه اين Sp رو به يك تابع بفرستيم و در اون تابع مثلا يك عكس يا ... رو به اين JPanel اضافه بشه؟
اصلا ميشه يك كلاس يا تابع يك شي رو به عنوان ورودي بپذيره يا فقط ميتونه extends بشه از اشياء؟
ممنون ميشم اگر جواب بديد.
تشكر از زحماتتون.
100% که می شه اینکارو کرد. شما ای کاش قبل شروع جاوا اول با مفاهیم Object Oriented آشنا می شدید.
pouria_bayat
پنج شنبه 09 دی 1389, 09:12 صبح
100% که می شه اینکارو کرد. شما ای کاش قبل شروع جاوا اول با مفاهیم Object Oriented آشنا می شدید.
ممنون متاسفانه مطالعه كردم حتي 2 كتاب و يك مقاله انگليسي رو در اين زمينه ديدم ولي كتابهاي فارسي كامل نبودند در اين زمينه و تمام سوالات رو براي يك مبتدي رفع و رجوع نميكردند و مقاله انگليسي هم خيلي سخت بود ترجمه كردنش و گاهي اوقات بيزارم ميكرد.
در كل ميشه يك مثال از صدا زدن تابع به همراه ارگومان(شي مورد نظر مثلا يك Jpanel كه در پست قبل توضيح دادم) و پارامترهاي ان مثال بزنيد تا با نحوه ان اشنا بشم.
javaphantom
پنج شنبه 09 دی 1389, 11:04 صبح
public class MyFrame extends JFrame {
private JPanel myPanel;
public MyFrame(JPanel panel) {
this.myPanel = panel;
this.getContentPane().add(this.myPanel);
this.setBounds(new Rectangle(200,200));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] s) {
JPanel jPanel = new JPanel(new FlowLayout());
MyFrame m = new MyFrame(jPanel);
}
}
توی تابع سازنده یا همان constructor یک argument هست که از نوع JPanel هست که از بیرون new کردم و بهش پاس دادم خیلی راحت
pouria_bayat
پنج شنبه 09 دی 1389, 11:41 صبح
public class MyFrame extends JFrame {
private JPanel myPanel;
public MyFrame(JPanel panel) {
this.myPanel = panel;
this.getContentPane().add(this.myPanel);
this.setBounds(new Rectangle(200,200));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] s) {
JPanel jPanel = new JPanel(new FlowLayout());
MyFrame m = new MyFrame(jPanel);
}
}
توی تابع سازنده یا همان constructor یک argument هست که از نوع JPanel هست که از بیرون new کردم و بهش پاس دادم خیلی راحت
ممنون از اينكه جواب داديد اما متاسفانه اشكال كار من هم دقيقا همين جاست.
استاد ما پروژه اي رو به ما داده و ازمون خواسته كه فقط با netbeans اونو طراحي فرم كنيم توي كدهاي بالا شما اومديد يك پنل جديد ايجاد كرديد(
JPanel jPanel = new JPanel(new FlowLayout());) و اونو به تابع
MyFrame فرستاديد و سپس از طريق دستور add اونو به فرم اضافه كرديد اما مشگل من همينه كه من فرم پبجره رو از طريق خود netbeans قبلا طراحي كردم
و يك JPanel ايجاد كردم به نام SP از طريق netbeans و جاشو توي صفحه مشخص كردم و ديگه نميتونم new كنم يا add كنم حالا با اين تفاصير بايد توي كدهايي كه ميتونم توي برنامه بزارم اين Sp رو بفرستم به تابع يا كلاس كه روش تغييرات اعمال بشه مثلا عكس توش ظاهر بشه و ...
تا حالا كسي نتونسته از بچه ها ارائه بده اخه تازه Netbeans رو شروع كرديم و قبلا خودمون layout بندي و ... مي كرديم.
javaphantom
پنج شنبه 09 دی 1389, 13:22 عصر
ممنون از اينكه جواب داديد اما متاسفانه اشكال كار من هم دقيقا همين جاست.
استاد ما پروژه اي رو به ما داده و ازمون خواسته كه فقط با netbeans اونو طراحي فرم كنيم توي كدهاي بالا شما اومديد يك پنل جديد ايجاد كرديد(
JPanel jPanel = new JPanel(new FlowLayout());) و اونو به تابع
MyFrame فرستاديد و سپس از طريق دستور add اونو به فرم اضافه كرديد اما مشگل من همينه كه من فرم پبجره رو از طريق خود netbeans قبلا طراحي كردم
و يك JPanel ايجاد كردم به نام SP از طريق netbeans و جاشو توي صفحه مشخص كردم و ديگه نميتونم new كنم يا add كنم حالا با اين تفاصير بايد توي كدهايي كه ميتونم توي برنامه بزارم اين Sp رو بفرستم به تابع يا كلاس كه روش تغييرات اعمال بشه مثلا عكس توش ظاهر بشه و ...
تا حالا كسي نتونسته از بچه ها ارائه بده اخه تازه Netbeans رو شروع كرديم و قبلا خودمون layout بندي و ... مي كرديم.
من نمی دونم دقیقا می خوای چی کار کنی ولی اگر منظورت اینکه نت بینز دست و پا تو بسته باید بهت بگم شما می تونید روی هر کامپونتی بری و اونجا رو به دلخواه خودت کد کنی و نت بینز این اجاز و بهت می ده.
pouria_bayat
پنج شنبه 09 دی 1389, 14:43 عصر
من نمی دونم دقیقا می خوای چی کار کنی ولی اگر منظورت اینکه نت بینز دست و پا تو بسته باید بهت بگم شما می تونید روی هر کامپونتی بری و اونجا رو به دلخواه خودت کد کنی و نت بینز این اجاز و بهت می ده.
:گریه: ديگه كلافه شدم:اشتباه: از بس سرچ كردم هم توي سايتهاي خارجي هم تو كتابها و هم از بس پست دادم و مزاحم شما شدم.
ببينيد واضح بگم من با Netbeans به صورت عكس زير يك JFrame ايجاد كردم:
http://up.iranblog.com/images/ilarftqjbo3vu2d59ht.jpg
حالا همانطور كه مشاهده مي كنيد يك JPanel براي عكس با نام JPPic توي JFrame ايجاد كردم ، فقط ميخواهم وقتي كه برنامه رو اجرا مي كنم عكس در JPanel به صورت اتوماتيك قرار بگيره. نميخواهم يك JPanelجديد newكنم و شي جديد تعريف كنم كه مجبور بشم layout بندي كنم !ميخواهم با اشيايي كه الان روي صفحه JFrameچيدم توي شي JPPic تغيير بدم كه وقتي اجرا شد عكس درونش قرار بگيره نه از طريق properties شي JPPic بلكه به صورت كد توش يك عكس قرار بده حالا من چه كدي توي اين قسمت Source پروژه ام وارد كنم:
http://up.iranblog.com/images/ik36gofi52r3su7x66.jpg
نميخواهم طراحي و layout بندي و چيدن اشيا از طريق كدها انجام بشه ميخواهم اينكار از طريق netbeans انجام بشه فقط ميخواهم بدونم اين JPanel اي كه با نام JPPic روي JFrame قرار دادم چي كدي بزارم كه بتونم توش تغيير بدم؟ عكس بزارم يا دايره بكشم يا خط بكشم و ...
فقط اميدم ديگه به شماست. خودم كلافه شدم الان يك هفته است دارم سرچ ميكنم و فيلم دانلود ميكنم پست ميدم و ...
javaphantom
پنج شنبه 09 دی 1389, 16:13 عصر
:گریه: ديگه كلافه شدم:اشتباه: از بس سرچ كردم هم توي سايتهاي خارجي هم تو كتابها و هم از بس پست دادم و مزاحم شما شدم.
ببينيد واضح بگم من با Netbeans به صورت عكس زير يك JFrame ايجاد كردم:
http://up.iranblog.com/images/ilarftqjbo3vu2d59ht.jpg
حالا همانطور كه مشاهده مي كنيد يك JPanel براي عكس با نام JPPic توي JFrame ايجاد كردم ، فقط ميخواهم وقتي كه برنامه رو اجرا مي كنم عكس در JPanel به صورت اتوماتيك قرار بگيره. نميخواهم يك JPanelجديد newكنم و شي جديد تعريف كنم كه مجبور بشم layout بندي كنم !ميخواهم با اشيايي كه الان روي صفحه JFrameچيدم توي شي JPPic تغيير بدم كه وقتي اجرا شد عكس درونش قرار بگيره نه از طريق properties شي JPPic بلكه به صورت كد توش يك عكس قرار بده حالا من چه كدي توي اين قسمت Source پروژه ام وارد كنم:
http://up.iranblog.com/images/ik36gofi52r3su7x66.jpg
نميخواهم طراحي و layout بندي و چيدن اشيا از طريق كدها انجام بشه ميخواهم اينكار از طريق netbeans انجام بشه فقط ميخواهم بدونم اين JPanel اي كه با نام JPPic روي JFrame قرار دادم چي كدي بزارم كه بتونم توش تغيير بدم؟ عكس بزارم يا دايره بكشم يا خط بكشم و ...
فقط اميدم ديگه به شماست. خودم كلافه شدم الان يك هفته است دارم سرچ ميكنم و فيلم دانلود ميكنم پست ميدم و ...
این که مشکلی نیست عزیز من از همون netbeans می روی component JPPic بعد کلیک سمت راست گزینه customise code رو انتخاب کن یک پنجره برات باز می شه بعد دیقیقا یک همچین کدی می بینی
JPPic = new JPanel(); مثلا یک همچین چیزی اون گوشه سمت چپ بالا کنارش یک combobox هست شما از حالت default ببرش به حالت custom creation بعد کد رو به این صورت تغییر بده
یکم خفن کد زدنش ولی خوب جاواست دیگه
JPPic = new JPanel(){
Image image = Toolkit.getDefaultToolkit().createImage("image's path");
@Override
protected void paintComponent(Graphics g) {
g.drawImage(image,0,0,this.getWidth(),this.getHeig ht(),this);
}
};
با این وقتی داره instance می گیره از component همونجا متدودی که override کردی رو می رصدا می زنه و بقیه کار.
OK می زنی و پنجره بسته می شه compile و اجرا
دیگه حرفا رم نزنی که امید فقط به شماست. ناراحت می شم
pouria_bayat
پنج شنبه 09 دی 1389, 17:19 عصر
واقعا كارتون عالي بود ممنونم بسيار.
خيلي خيلي لطف كرديد يك هفته داشتم دنبالش ميگشتم.
محركه ايد، تشكر.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.