ورود

View Full Version : گفتگو: پیشنهاد برنامه برای مبتدیان



trustmiracle
دوشنبه 28 بهمن 1387, 16:32 عصر
سلام
من چند وقتی دارم با جاوا کار می کنم و یه خودره از مفاهیم خیلی مقدماتیش رو میدونم.
برای یادگیری می خوام با برنامه پیش برم یعنی حین ساخت یه برنامه کار با جاوا رو یاد بگیرم.
دوستانی که جاوا کار می کنند برای شروع میشه یه برنامه پیشنهاد بدهند که تقریبا تمامی مباحث j2se رو پوشش بده.
اگر هم همش نمیشه بخش مهمش رو پوشش بده.
ممنون

Nazanin-Zohreh
دوشنبه 28 بهمن 1387, 19:47 عصر
سلام

من هم چند وقت پیش همچین پیشنهادی و اینجا دادم ولی انگار نه انگار . اصلا کسی اهمیت نداد و به خاطر همین هم تایپیک رو حذف کردم .


اولا بذارید من یه چیزی و صادقانه بگم . اگه من چیزی از جاوا بلد نیستم این اصلا خنده دار نیست و اصلا هم خجالت نمیکشم که بلد نیستم . سوال میپرسم در حد یک مبتدی و دوستان هم جواب بدن .

اگه شما دوست محترم موافق هستید همین جا یک برنامه رو شروع میکنیم به نوشتن و تمام سورس کدهامون هم اینجا مینویسیم تا بقیه هم استفاده کنن .

برنامه ای که من پیشنهاد میکنم ثبت نام دانشجویی . که فکر میکنم بیشتر مباحث se رو در بر میگیره .

حالا اگه شما پیشنهاد دیگه ای دارید بگید .دیگه حرف نزنیم عمل کنیم . و خواهشم از پیشکسوتان در زمینه جاوا اینه که حداقل ما رو تو این بحث یاری کنن .

trustmiracle
دوشنبه 28 بهمن 1387, 20:06 عصر
اولا بذارید من یه چیزی و صادقانه بگم . اگه من چیزی از جاوا بلد نیستم این اصلا خنده دار نیست و اصلا هم خجالت نمیکشم که بلد نیستم . سوال میپرسم در حد یک مبتدی و دوستان هم جواب بدن .
خوب مگه کسی گفته خنده داره. من هم چیزه زیادی بلد نیستم و تازه می خوام یاد بگیرم:لبخند:

من موافقم.
میشه حتی به صورت مسابقه ای هم باشه.
موضوعش برام من فرق نمی کنه فقط یه کم در موردش توضیح بدید که اصلا چه کارهایی باید انجام بده و ...

Nazanin-Zohreh
دوشنبه 28 بهمن 1387, 20:26 عصر
بسیار خب

اولا احتیاجی نیست که ما در همین ابتدا تمامی کارهایی که یک ثبت نام احتیاج داره رو انجا بدهیم همین طور که جلو میرویم این برنامه هم کامل تر میشه .

ابتدا یک فرم طراحی کنیم که این فرم سلیقه ای هر کس که فرم زیباتری و البته کارا تر و همچنین کار کردن با اون فرم راحت تر باشه انتخاب میشه و از اون فرم برای پروژه استفاده خواهد شد .

این فرم تمامی مشخصات فردی یک دانشجو رو میخواد دریافت کنه . حالا بعد از اونو کاری نداریم که این اطلاعات دانشجو رو میخواهیم چی کار کنیم.

هر کس که این فرم رو طراحی کرد سورس کد رو بزاره تا بقیه هم روی سیستم هاشون مشاهده کنن .

البته یه مشکل اینجا وجود داره و اون اینه که : آیا ما میخواهیم جاوا یاد بگیریم ؟ اگر بخواهیم جاوا یاد بگیریم لطفا از IDE نت بینز استفاده نکنیم یا اگر هم استفاده میکنیم از قسمت ویژوال اون استفاده نکنیم و علتش هم اینه که شما در نت بینز به راحتی میتوانید یک فرم طراحی کنید و سپس روی اون فرم چندین کلید بگذارید یا منو و .... که نت بینز کدهای این کارو به طور خودکار تولید میکنه . مشکل اینجاست که اگر ما از قسمت ویژوال هر IDEی استفاده کنیم برای یادگیری مفید نیست مثلا شما باید با مدیریت لایه ها که یه بخش مهمی هست باید آشنا بشید و ....

منظور من اینه که تمامی کارها باید کد زنی بشه . همین.

حالا برید فرم رو بسازید .

مشخصات فرم :

1. زیبا

2. کار کردن با فرم راحت باشه و قابل فهم برای کاربر

NaderDelyani
سه شنبه 29 بهمن 1387, 13:25 عصر
سلام منم هستم

من پیشنهاد میکنم از IDE MYEclips استفاده کنیم .

handinux
سه شنبه 29 بهمن 1387, 14:19 عصر
یکی از خواص مهم جاوا اینه که به راحتی کدهای یک برنامه نویس قابلیت reusable داره و همین تضمین کننده ی کار تیمی هست.در یه کار گروهی بهتره هر کسی یه بخش رو بنویسه و این بخشها کنار هم گذاشته بشه اینطوری درک خوبی از شی گرایی و reusability به معنای واقعی به ذهن برنامه نویس القا می شه.پس موازی کاری و انجام یک کار توسط چند نفر یکی از ایراداته.پروژه خوبی هست برای یادگیری.موفق باشید.من هم یک مبتدی ام

NaderDelyani
سه شنبه 29 بهمن 1387, 17:57 عصر
من با گفته ی جناب handinux موافقم . هر کس باید یه قسمت از کارو انجام بده . خب یکی باید تقسیم کار کنه .

amirfarshad
سه شنبه 29 بهمن 1387, 19:04 عصر
من با گفته ی جناب handinux موافقم . هر کس باید یه قسمت از کارو انجام بده . خب یکی باید تقسیم کار کنه .
بالاتر گفته شد که فعلا فقط یک فرم بسازیم تا اطلاعات دانشجو رو بگیره و با بعدش، فعلا کاری نداریم.
اما تقسیم کار برای برنامه ای انجام میشه که کلش مشخص شده باشه و بعد معین بشه که کی چه قسمتی رو انجام بده
این دو تا حرف کمی با هم فرق دارن،که هر کدومشون هم مزایا و معایبی دارن.
به نظر من روش اول بهتره، چون میخواهیم که اول خود جاوا رو یاد بگیریم، بعدش میشه توی یه پروژه دیگه با روش دوم کار کرد.

trustmiracle
سه شنبه 29 بهمن 1387, 19:47 عصر
منم با روش اول موافقم.
چون قصد یادگیری هست نه ساخت پروژه.
ولی اگر از اول دیتابیس و قابلیت ها مشخص باشه خیلی بهتره چون بعدا مشکل پیدا می کنیم (من چنین تجربه ای دارم).
من فرمم رو سعی می کنم تا فردا بگذارم.

Nazanin-Zohreh
چهارشنبه 30 بهمن 1387, 13:22 عصر
سلام :

دوستان در مورد فرم باید اینو بگم که همه ی فرم های طراحی شده باید دارای این مشخصات باشند :

1. Text feilds : نام ، نام خانوادگی ، نام پدر ، تاریخ تولد ، کد ملی ، شماره ی شناسنامه ، آدرس

2 . داشتن سه Buttom: یکی برای ثبت کردن اطلاعات باشه . یعنی با زدن بر روی این کلید اطلاعات وارد شده به مقصد بعدی حرکت کنه . حالا مقصد بعدی میتونه صفحه نمایش باشه میتونه بانک اطلاعاتی SQL باشه میتونه یک فایل باشه و یا میتونه هر جایی باشه که ما مد نظرمون هست که بعد از طراحی فرم تصمیم خواهیم گرفت . کلید دوم هم باید وجود داشته باشه برای ثبت نام نفر بعدی یعنی بازدن این کلید تمامی TEXT Field ها null بشن یا به عبارتی پاک بشن . و کلید سوم هم برای بستن این فرم باید بر روی فرم وجود داشته باشه .

به عنوان مثال :





import java.awt.FlowLayout;</B>

import java.awt.GridLayout;</B>

import javax.swing.JFrame;</B>

import javax.swing.JLabel;</B>

import javax.swing.JTextField;</B>

import javax.swing.JButton;</B>

import javax.swing.JPanel;</B>



public class FormSabtNam extends JFrame{</B>



// Create Constructor for FormSabtNam Class

public FormSabtNam(){


super("Sabte Nam");
setSize(500, 300);





// Create Text Fields

//////////////////////////////////////////


JTextField jtfName = new JTextField("Name",15);
JTextField jtfFamily = new JTextField("Family",20);
JTextField jtfNFather = new JTextField("Name Father",15);
JTextField jtfShSh = new JTextField("Shomare Shenas name",15);
JTextField jtfCodeM = new JTextField("Code Melly",10);
JTextField jtfDateB = new JTextField("Tarekh Tavalod",8);
JTextField jtfAddress = new JTextField("Address",30);

/////////////////////////////////////////


// Create Labels

//////////////////////////////////////////


JLabel jlName = new JLabel("Name:");
JLabel jlFamily = new JLabel("Family:");
JLabel jlNFather = new JLabel("N.Father:");
JLabel jlShSh = new JLabel("Sh.SH:");
JLabel jlCodeM = new JLabel("Code.M:");
JLabel jlDateB = new JLabel("Date.B");
JLabel jlAddress = new JLabel("Address:");

//////////////////////////////////////////


// Create Buttons

/////////////////////////////////////////


JButton jRegister = new JButton("Register");
JButton jNew = new JButton("New");
JButton jClose = new JButton("Close");

/////////////////////////////////////////


// Create Panel

/////////////////////////////////////////

JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JPanel p5 = new JPanel();
JPanel p1234 = new JPanel();
/////////////////////////////////////////


// Create Layout

/////////////////////////////////////////

FlowLayout fl1 = new FlowLayout(FlowLayout.LEFT);
GridLayout gl1 = new GridLayout(2,1,2,2);
GridLayout gl2 = new GridLayout(4,1,2,2);
FlowLayout fl2 = new FlowLayout(FlowLayout.CENTER);

////////////////////////////////////////


// Set Layout to Form

////////////////////////////////////////

setLayout(gl1);
////////////////////////////////////////


// Set Layout to Panels

////////////////////////////////////////


p1.setLayout(fl1);
p2.setLayout(fl1);
p3.setLayout(fl1);
p4.setLayout(fl1);
p5.setLayout(fl2);
p1234.setLayout(gl2);
/////////////////////////////////////////


// Add Components to Panels

/////////////////////////////////////////




p1.add(jlName);
p1.add(jtfName);
p1.add(jlFamily);
p1.add(jtfFamily);

p2.add(jlNFather);
p2.add(jtfNFather);
p2.add(jlShSh);
p2.add(jtfShSh);

p3.add(jlCodeM);
p3.add(jtfCodeM);
p3.add(jlDateB);
p3.add(jtfDateB);

p4.add(jlAddress);
p4.add(jtfAddress);

p5.add(jRegister);
p5.add(jNew);
p5.add(jClose);


p1234.add(p1);
p1234.add(p2);
p1234.add(p3);
p1234.add(p4);
/////////////////////////////////////////


//Add Panels to Form

/////////////////////////////////////////

add(p1234);
add(p5);
////////////////////////////////////////


}// End Constructor


public static void main(String[] args) {



// Create Object From FormSabtNam Class

FormSabtNam test = new FormSabtNam();

// Visible Form

test.setVisible(true);


}

}

Nazanin-Zohreh
چهارشنبه 30 بهمن 1387, 13:26 عصر
در ضمن اگه کسی در مورد این کد توضیحی میخواهد بپرسه تا جایی که بتونم توضیح میدم . اگر هم این فرم اشکال داره که صد البته اشکال داره بگید تا من برطرفش کنم .

amirfarshad
چهارشنبه 30 بهمن 1387, 16:01 عصر
در ضمن اگه کسی در مورد این کد توضیحی میخواهد بپرسه تا جایی که بتونم توضیح میدم . اگر هم این فرم اشکال داره که صد البته اشکال داره بگید تا من برطرفش کنم .
خوب آفرین. کلنگ اول رو زدی:لبخندساده:

من کدت رو اجرا کردم ولی به این خطش گیر میداد. یعنی Exception میداد و اجازه اجرا نبود.

setLayout(gl1);چرا؟

البته خودم حلش کردم با این مقدار

this.getContentPane().

بگذریم که کلا من با Layout ها مشکل دارم. به نظرم بهترین Layout همون null هست.
البته جی بیلدر هم یه Layout داره به اسم XYLayout که چیز خوبیه، ولی حیف که مخصوص خودشه فقط.

amirfarshad
چهارشنبه 30 بهمن 1387, 16:09 عصر
یه سوال هم داشتم: فارسی کار کنیم یا انگلیسی؟

Nazanin-Zohreh
چهارشنبه 30 بهمن 1387, 21:06 عصر
سلام :

دوستان من این برنامه رو روی IDE نت بینز هم اجرا کردم مشکلی نداشت . جناب amirfarshad علت اینکه این برنامه اون خطا رو به شما داده رو نمیدونم ولی خب خودت حلش کردی .

در مورد فارسی کردن شما میتونید فرمتونو فارسی کنید فرقی نمیکنه . مهم کد و نحوه ی کد نوشتن و درک کردن مفاهیم جاوا و کلاس و متدهاست .

فقط از همه دوستان خواهش میکنم خودتون کد بنویسید و با مشکلات کد نویسی آشنا بشید هر جا کسی به مشکل خورد بگه همه با هم زوم میکنیم روی مشکل اون شخص و مشکلشو حل میکنیم .

منتظر کدهاتون هستم . کد بزنید .

trustmiracle
چهارشنبه 30 بهمن 1387, 21:12 عصر
این هم فرم من . فقط با اجازتون یکی دو تا فیلد بهش اضافه کردم (مثل شماره دانشجویی و رشته).


package Design;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;

public class RegisterStudent extends JFrame{
int a;
JLabel lblId;
JLabel lblName;
JLabel lblFamily;
JLabel lblCourse;
JLabel lblAddress;
JLabel lblFatherName;
JLabel lblCountryCode;
JLabel lblPersoanlCode;

JFormattedTextField ftxtId;
JTextField txtName;
JTextField txtFamily;
JTextField txtAddress;
JTextField txtFatherName;
JFormattedTextField ftxtCountryCode;
JFormattedTextField ftxtPersoanlCode;

JComboBox cmbCourse;

JButton btnCancel;
JButton btnOk;
JButton btnReset;

JSeparator jspDown;

JPanel Panel=new JPanel();

public RegisterStudent() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Panel.setLayout(null);
this.setContentPane(Panel);
this.setSize(450,230);
init();

}

public static void main(String args[]){
new RegisterStudent().setVisible(true);
}

void init(){
lblId=new JLabel("Student Id : ");
lblId.setBounds(20,5,80,26);
lblName=new JLabel("Name : ");
lblName.setBounds(20,25,50,26);
lblFamily=new JLabel("Family : ");
lblFamily.setBounds(250,25,55,26);
lblFatherName=new JLabel("Father Name : ");
lblFatherName.setBounds(20,45,100,26);
lblCountryCode=new JLabel("Regional Code : ");
lblCountryCode.setBounds(20,65,105,26);
lblPersoanlCode=new JLabel("SH : ");
lblPersoanlCode.setBounds(20,85,30,26);
lblCourse=new JLabel("Course");
lblCourse.setBounds(20,105,80,26);
lblAddress=new JLabel("Address : ");
lblAddress.setBounds(20,125,80,26);

ftxtId=new JFormattedTextField(a);
ftxtId.setBounds(125, 8, 120, 20);
txtName=new JTextField();
txtName.setBounds(125, 28, 100, 20);
txtFamily=new JTextField();
txtFamily.setBounds(305, 28, 120, 20);
txtFatherName=new JTextField();
txtFatherName.setBounds(125, 48, 100, 20);
ftxtCountryCode=new JFormattedTextField(a);
ftxtCountryCode.setBounds(125, 68, 120, 20);
ftxtPersoanlCode=new JFormattedTextField(a);
ftxtPersoanlCode.setBounds(125, 88, 80, 20);
cmbCourse=new JComboBox ();
cmbCourse.setBounds(125, 108, 120, 20);
txtAddress=new JTextField();
txtAddress.setBounds(125, 128, 300, 20);

jspDown=new JSeparator();
jspDown.setBounds(20, 160, 400, 5);


btnCancel=new JButton("Cancel");
btnCancel.setBounds(340, 170, 80, 20);
btnOk=new JButton("Ok");
btnOk.setBounds(260, 170, 80, 20);
btnReset=new JButton("Reset");
btnReset.setBounds(180, 170, 80, 20);

Panel.add(lblId);
Panel.add(lblName);
Panel.add(lblFamily);
Panel.add(lblFatherName);
Panel.add(lblCountryCode);
Panel.add(lblPersoanlCode);
Panel.add(lblCourse);
Panel.add(lblAddress);

Panel.add(ftxtId);
Panel.add(txtName);
Panel.add(txtFamily);
Panel.add(txtFatherName);
Panel.add(ftxtCountryCode);
Panel.add(ftxtPersoanlCode);
Panel.add(cmbCourse);
Panel.add(txtAddress);

Panel.add(jspDown);

Panel.add(btnCancel);
Panel.add(btnOk);
Panel.add(btnReset);
}
}


در مورد این layout که استفاده کردین توضیح می دید؟

amirfarshad
چهارشنبه 30 بهمن 1387, 22:34 عصر
خوب بالاخره من هم نوشتمش:لبخند:

با اضافه کردن اون فیلد شماره موافق نیستم، هنوز که ثبت نام نکرده که شماره اش مشخص بشه چیه. اما در مورد رشته میشه یه جایی براش در نظر گرفت، البته خودم نگذاشتمش.
اما تاریخ تولد، فعلا خودم هم یه JTextField گذاشتم، ولی فکر میکند بد نباشه که سه بخش بشه، روز و ماه و سال و توی مثلا JComboBox باشه.
و یه مسئله دیگه اینکه، اگر فارسی کار کنیم، اول مشکل اینکه فرمهامون همه جا فارسی باشه و همه جا درست دیده بشه، رو میشه حلش کرد، میدونید که گاهی ویندوز بازی در میاره برای این مسئله، دوم موقعی که به دیتابیس رسیدیم، مشکلات فارسی نوشتن توی دیتابیس رو خواهیم داشت. البته اگر MySQL باشه مشکلات کمتره ولی با MS SQL Server که قطعا داستان خواهیم داشت.

و در آخر، با کد trustmiracle هم من مشکل داشتم، با int a; که وقتی برداشتمش، مشکل حل شد.

میشه کدهای همدیگه رو، همه مون امتحان کنیم که ببینیم مشکل داریم باهاش یا نه؟

اما کد من:

Nazanin-Zohreh
چهارشنبه 30 بهمن 1387, 23:21 عصر
آفرین :تشویق:
همینه همه کد بزنید تا دونه دونه مشکلات حل بشه .

در مورد Layout ها حقیقتش من موقعه ای به فکر این لایه ها افتادم که با مشکل چیدن Componentها روی ظرف ها مشکل داشتم . یعنی اون چیدمانی که من میخواستم نمیشد که نمیشد .

که بعد از یکسری تخقیقات متوجه شدم که باید از مدیریت لایه ها استفاده کنم که به طور مختصر برای دوستان شرح میدم .

به طور کلی ما سه نوع مدیریت لایه داریم(البته شاید مدیریت لایه های دیگه ای هم باشه که من این 3 تا رو به شما میگم ) :

1.مدیریت لایه ی Flowlayout

2. مدیریت لایه ی Borderlayout

3.مدیریت لایه ی Gridelayout

نکته : این مدیریت ها رو روی ظرف ها میشه set کرد (دقت کنید ) .

شرح :

1. مدیریت لایه ی Flowlayout

اگر ظرفی به این مدیریت set شده باشه بعد از آن هر چی Component بر روی این ظرف بیاد به ترتیب از چپ به راست چیده میشه . این مدیریت لایه به طور پیش فرض بر روی ظرف javax.swing.JPanel اعمال شده است .

2.مدیریت لایه ی Borderlayout

اگر ظرفی به این مدیریت set شده باشه شما میتوانید Componentهای خودتان را در : شمال ، جنوب ، شرق ، غرب و مرکز بچینید .این مدیریت چیدمانبه طور پیش فرض بر روی JFrame ها وسایر پنجرها اعمال شده است .

3.مدیریت لایه ی Gridelayout

اگر ظرفی به این مدیریت set شده باشه تمامی Componentها رو میتوانید به شکل سطر و ستونی مرتب کنید .

اگر باز هم مفهوم لایه ها برای شما جا نیفتاده برای هرکدام مثال هم بیاورم تا متوجه بشید .

در مورد کد جناب trustmiracle میخواستم بپرسم که چرا شما از متد void inite استفاده کردید . به نظر من این متد برای مقدار دهی اولیه ی Applet هاست . در ضمن در مورد متد setBounds اگر توضیح بدید ممنون میشم .

Nazanin-Zohreh
چهارشنبه 30 بهمن 1387, 23:42 عصر
آقا من قبول نمیدم شما از من بیشتر بلد هستید . فرم های شما خیلی شکیل تره . باید به منم یاد بدید . البته من الان زوم کردم رو کدهای شما دارم کدهاتونو کنکاش میکنم

راستی مرحله ی بعدی رو موقع ای اعلام میکنیم که در مورد این فرم ها هیچ سوالی برای کسی باقی نمونده باشه .

موفق و پیروز باشید .

amirfarshad
پنج شنبه 01 اسفند 1387, 00:42 صبح
در مورد کد جناب trustmiracle میخواستم بپرسم که چرا شما از متد void inite استفاده کردید . به نظر من این متد برای مقدار دهی اولیه ی Applet هاست . در ضمن در مورد متد setBounds اگر توضیح بدید ممنون میشم .
با اجازه بزرگترها من یه چیزی بگم: اگر درست یادم مونده باشه، نت بینز میومد توی کانستراکتور این متد رو فراخونی میکرد و بعد همه اشیا فرم رو توی اون متد مینوشت کدشون رو به جای اینکه توی کانستراکتور بنویسه.

جی بیلدر هم همین کار رو میکنه و یه متد به نام jbInit می سازه و اشیا رو (منظور مشخصه های اشیا هست که کجا باشن، چه رنگی باشن و ...) رو توی این تعریف میکنه.
نمیدونم چرا، ولی فکر میکنم برای اینکه بتونه Exceptionهای موقع اجرای فرم رو بگیره.
اما اون چیزی که اپلت رو فراخونی میکنه init هست، به املا اونها توجه کن.


آقا من قبول نمیدم شما از من بیشتر بلد هستید . فرم های شما خیلی شکیل تره . باید به منم یاد بدید . البته من الان زوم کردم رو کدهای شما دارم کدهاتونو کنکاش میکنم

راستی مرحله ی بعدی رو موقع ای اعلام میکنیم که در مورد این فرم ها هیچ سوالی برای کسی باقی نمونده باشه .

موفق و پیروز باشید .
فرمهای ما به قول شما شکیل تره چون از layout ها استفاده نکردیم، اگر کد ها رو بخونی میبینی که اون رو به null ست کردیم. اونقدرها هنوز حرفه ای نشدیم:چشمک:
مزیتی که این کار داره اینه که همه چی دست خودمونه که کدوم شی کجا باشه. مثلا به این توجه کن:

jLabel8.setBounds(new Rectangle(10, 123, 77, 21));این جای شی رو توی صفحه و اندازه اش رو مشخص میکنه.
محور مختصات رو که میدونی چیه، فرض کن نقطه (0و0) گوشه چپ سمت بالاست. حالا اون 4 تا عدد به این صورت هستن که از چپ به راست:
عدد اول مقدار X رو نشون میده، عدد دوم مقدار Y رو، یعنی نقطه شروع شی که اون هم از سمت چپ بالای شی حساب میشه.
عدد سوم طول یا پهنای شی و عدد چهارم عرض یا ارتفاع اونه(داستانه ترجمه لغتهای WIDTH و HEIGHT)
به عکس ضمیمه شده هم توجه کن، بهتر از این نمیتونستم بکشم:

trustmiracle
پنج شنبه 01 اسفند 1387, 11:33 صبح
در مورد کد جناب trustmiracle میخواستم بپرسم که چرا شما از متد void inite استفاده کردید . به نظر من این متد برای مقدار دهی اولیه ی Applet هاست . در ضمن در مورد متد setBounds اگر توضیح بدید ممنون میشم .
در مورد void init همون تو که گفتند نتبینز ازش استفاده می کنه برای چیدمان من هم می خواستم تو سازنده بنویسم دیدم زیادی طولانی میشه گفتم یه تابعی بنویسم برای اون.


مزیتی که این کار داره اینه که همه چی دست خودمونه که کدوم شی کجا باشه. مثلا به این توجه کن:
کد:
jLabel8.setBounds(new Rectangle(10, 123, 77, 21));
این جای شی رو توی صفحه و اندازه اش رو مشخص میکنه.
در مورد new rectangle یه توضیحی میدی فرقش در نوشتنش با نوشتنش چیه؟

amirfarshad
پنج شنبه 01 اسفند 1387, 17:42 عصر
در مورد new rectangle یه توضیحی میدی فرقش در نوشتنش با نوشتنش چیه؟
سوال رو من متوجه نشدم درست.
اما اگر منظورت اینه که Rectangle چیه، یه شی برای ساخت مستطیل هست و تابع setBounds هم یک مقدار Rectangle رو میپذیره و هم 4 تا عدد که به ترتیب همون عددهای موجود در Rectangle هستن.

یا اگر منظورت این بوده باشه که چرا ide میاد بجای اینکه 4 عدد رو بده به setBounds، میاد اون 4 تا عدد رو میده به Rectangle و بعد اون رو اضافه میکنه به setBounds، این رو نمیدونم چرا.

و یا اگر منظورت این بوده که چرا میاد یک شی Rectangleرو اینجوری میسازه و اضافه میکنه، این رو هم دقیق نمیتونم بگم، ولی به نظرم، لازم نیست که متغییر اضافه تعریف بشه برای اشیایی که فقط یکجا استفاده میشن. پس میان به این صورت اون شی رو میسازن که در جایی که لازمه، اون رو New میکنن و مقدارهای مورد نظر رو بهش میدن. فکر کنم اینطوری فضای کمتری از مموری رو اشغال کنه.

در مورد سوالت چیز دیگه ای به ذهنم نمیرسه. اگر توضیحات من ناقص و یا اشتباه هست، دوستان دیگه لطفا اون رو اصلاح کنند.
:لبخندساده:

mazdadoost
پنج شنبه 01 اسفند 1387, 17:55 عصر
راستش منم هم زیاد سر در نیووردم :اما به شکل خلاصه :
1-اقتضائات API .
2-رعایت اصول شی گرایی.

چون واقعا ازاین حرکت قشنگتون خوشم اومده دلم نمیاد لقمه حاضر به کسی پاس بدم. خودتون کهتا حالا کار کردین در مورد این دو مورد صحبت وبرسی کنید .
موفق باشید.

amirfarshad
جمعه 02 اسفند 1387, 11:33 صبح
1-اقتضائات API .


این رو متوجه نشدم، میشه بیشتر راهنمایی کنید؟



2-رعایت اصول شی گرایی.

خوب این رو میشه یه چیزهایی فهمید، به نظرم میخوان که همه چیز در قالب یک شی قرار داشته باشه.
حالا فعلا دارم یه خورده میگردم ببینم که این اصول شی گرایی چه چیزهایی هستن.

Nazanin-Zohreh
یک شنبه 04 اسفند 1387, 13:10 عصر
سلام

ببخشید من یه چند روزی نبودم .

خب ، فکر کنم بحث در مورد متدهای setBounds و شی Rectangle باشه .

اولا متد setBounds چی کار میکنه ؟

متد SetBounds باعث میشه Component که ما مشخصاتشو معیین کردیم محل و اندازشو مشخص میکنه .

و به طور کلی دو شکل داره :

1.



setBounds(int x, int y, int width, int height)

که آرگومانهای این متد خیلی واضح هستن . این متد باعث میشه اون Componet در محل و با اندازه ی دلخواه شکل بگیره .

2.



setBounds(Rectangle r)

این متد باعث میشه اون Component در محل و با اندازه ی دلخواه مطابق با یک محدوده ی شی Rectangle شکل بگیره . یعنی شما میتوانید با استفاده از نمونه شی که در اینجا r هست ، به تک تک پارامتر ها دسترسی داشته باشید مثلا : r.x ، r.y، r.width،r.height .

خب اگر مشکل حل شده بریم سراغ مرحله ی بعدی کارمون .

*ASRCH*
یک شنبه 04 اسفند 1387, 23:51 عصر
سلام :

بحث واقعا جالبیه . دستتون درد نکنه . ولی خواهشا ادامه دار باشه و تا آخر ادامه بدید .

منم تازه کارم میخواستم تو بحثتون شرکت کنم . لطفا منو راهنمایی کنید .:لبخندساده:

Nazanin-Zohreh
دوشنبه 05 اسفند 1387, 11:34 صبح
جناب *ASRCH* لطفا یک فرم طراحی کنید . با مشخصاتی که گفته شده .

ali zi zeperto
چهارشنبه 07 اسفند 1387, 13:12 عصر
کارتون خیلی عالیه.:تشویق:بالاخره یه جا دیدم که کار گروهی داره انجام میشه.یعنی همه با هم دارن مثل کلاس درس کار می کنن.اگه شما تازه کارید من خیلی خیلی تازه کارم و تازه دارم مفاهیم پکیج ها رو می خونم اما کار شما رو که دیدم خیلی مشتاق شدم که زودتر خودم رو برسونم.

مراقب باشید که کارتون منحرف نشه و همینطور ادامه بدید.صد در صد همه شما و هر کس که تازه وارد باشه از این بحثها نتیجه می گیره.:لبخندساده:

*ASRCH*
پنج شنبه 08 اسفند 1387, 00:18 صبح
//author ASRCH



import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextArea;

import javax.swing.JTextField;


public class Form1 extends JFrame{

JLabel jLName = new JLabel("Name :");
JLabel jLFamily = new JLabel("Family :");
JLabel jLShSh = new JLabel("SH.SH :");
JLabel jLCodem = new JLabel("Code.M :");
JLabel jLDateT = new JLabel("Date B :");
JLabel jLNameF = new JLabel("Name Father :");
JLabel jLAddress = new JLabel("Address :");

JTextField jtfName = new JTextField();
JTextField jtfFamily = new JTextField();
JTextField jtfNameF = new JTextField();
JTextField jtfCodeM = new JTextField();
JTextField jtfShSh = new JTextField();
JTextField jtfDateT = new JTextField();
JTextArea jtfAddress = new JTextArea();

JButton jbNew = new JButton("New");
JButton jbCancel = new JButton("Cancel");
JButton jbRegister = new JButton("Register");

public Form1(){


setSize(450, 400);

setLayout(null);

jLName.setBounds(30, 30, 40, 15);
jLFamily.setBounds(30, 60, 50, 15);
jLNameF.setBounds(30, 90, 80, 15);
jLShSh.setBounds(30, 120, 50, 15);
jLCodem.setBounds(30, 150, 50, 15);
jLDateT.setBounds(30, 180, 50, 15);
jLAddress.setBounds(30, 230, 60, 15);

jtfName.setBounds(100, 30, 150, 22);
jtfFamily.setBounds(100, 60, 150, 22);
jtfNameF.setBounds(130, 90, 150, 22);
jtfShSh.setBounds(100,120, 150, 22);
jtfCodeM.setBounds(105, 150, 150, 22);
jtfDateT.setBounds(100, 180, 150, 22);
jtfAddress.setBounds(120, 210,250, 60);
jbRegister.setBounds(30, 300, 100, 30);
jbNew.setBounds(170, 300, 100, 30);
jbCancel.setBounds(320, 300, 100, 30);

add(jbCancel);
add(jbNew);
add(jbRegister);
add(jtfShSh);
add(jtfCodeM);
add(jtfDateT);
add(jtfAddress);
add(jtfNameF);
add(jtfFamily);
add(jtfName);
add(jLAddress);
add(jLDateT);
add(jLCodem);
add(jLShSh);
add(jLNameF);
add(jLFamily);
add(jLName);

setVisible(true);




}


public static void main(String[] args) {

Form1 register = new Form1();

}

}



منتظر مرحله بعدی هستیم .

Nazanin-Zohreh
پنج شنبه 08 اسفند 1387, 14:18 عصر
بسیار خب

خب تا اینجا یکسری از دوستان کدهای خودشونو اوردن و دیگه کسی در مورد این کدها سوالی نمیپرسه بنابراین به این نتیجه میرسیم که کسی در مورد این کدها مشکلی نداره خب اگر موافق باشید فاز بعدی کارمون رو شروع کنیم

البته باز هم این گفته های من جنبه ی پیشنهادی داره اگر کسی پیشنهاد دیگه ای داره میتونه اعلام کنه .


خب تا اینجا ما یک فرم ساختیم که در آن مشخصات یک دانشجو را دریافت میکنه . در داخل این فرم سه کلید وجود داشت که به ترتیب : Register یا همان ثبت نام New یا همان جدید و Cancel یا انصراف بود .

در این مرحله:
1. هنگامی که روی کلید Cancel کلیک شد باید این فرم بسته شود .
2.هنگامی که روی کلید New کلیک شد باید تمامی مشخصاتی که داخل TextFieldها از قبل وجود داشته خالی شود .

توجه : فعلا با کلید Register کاری نداریم . کلید Register در فاز بعدی انجام خواهد شد.

3.در داخل این فرم یک منو ایجاد کنید که دارای دو گزینه به ترتیب : New و Exit . میتوانید نام منو را هم File بگیرید . انتخاب کردن گزینه ی New از منوی File همان کاری را انجام میدهد که کلید New روی فرم انجام میدهد . همچنین گزینه ی Exit در منوی File هم معادل کلید Cancel میباشد .

منتظر پیشنهادات و کدهای گفته شده هستیم .

unhandled_event
جمعه 09 اسفند 1387, 23:04 عصر
سلام
ضمن خسته نباشید و آرزوی موفقیت
با اجازه من کد رو با امکان look and fill کمي اصلاح کردم تا بیشتر شبیه فرمهاي تحت ویندوز بشه که اکثرا به اون شکل عادت داریم
همچنین بعنوان نمونه jtfName رو right to left کردم برای تایپ فارسی.
پیشنهادات :
* شاید با چند تا متد و لوپ زدن روي کامپوننتهای JFrame اصلی مسائلی مثل سایز و مشخصات کامپوننتها رو بصورت عمومی محاسبه و مقداردهي کرد تا حجم کد بیاد پایین.
* برای شکیل شدن هرچه بیشتر فرم به layout نیاز خواهد بود.
* بعد از ایجاد منو ایده پنجره هایی شبیه به فرمهای mdi child در یک صفحه اصلی میتونه مفید باشه.






//author ASRCH
import java.awt.ComponentOrientation;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

public class Form1 extends JFrame {

JLabel jLName = new JLabel("Name :");

JLabel jLFamily = new JLabel("Family :");
JLabel jLShSh = new JLabel("SH.SH :");
JLabel jLCodem = new JLabel("Code.M :");
JLabel jLDateT = new JLabel("Date B :");
JLabel jLNameF = new JLabel("Name Father :");
JLabel jLAddress = new JLabel("Address :");
JTextField jtfName = new JTextField();
JTextField jtfFamily = new JTextField();
JTextField jtfNameF = new JTextField();
JTextField jtfCodeM = new JTextField();
JTextField jtfShSh = new JTextField();
JTextField jtfDateT = new JTextField();
JTextArea jtfAddress = new JTextArea();
JButton jbNew = new JButton("New");
JButton jbCancel = new JButton("Cancel");
JButton jbRegister = new JButton("Register");

public Form1() {
setSize(450, 400);
setLayout(null);
jLName.setBounds(30, 30, 40, 15);

jLFamily.setBounds(30, 60, 50, 15);
jLNameF.setBounds(30, 90, 80, 15);
jLShSh.setBounds(30, 120, 50, 15);
jLCodem.setBounds(30, 150, 50, 15);
jLDateT.setBounds(30, 180, 50, 15);
jLAddress.setBounds(30, 230, 60, 15);
jtfName.setBounds(100, 30, 150, 22);
jtfName.setComponentOrientation(ComponentOrientati on.RIGHT_TO_LEFT);

jtfFamily.setBounds(100, 60, 150, 22);
jtfNameF.setBounds(130, 90, 150, 22);
jtfShSh.setBounds(100, 120, 150, 22);
jtfCodeM.setBounds(105, 150, 150, 22);
jtfDateT.setBounds(100, 180, 150, 22);
jtfAddress.setBounds(120, 210, 250, 60);
jbRegister.setBounds(30, 300, 100, 30);
jbNew.setBounds(170, 300, 100, 30);
jbCancel.setBounds(320, 300, 100, 30);
add(jbCancel);
add(jbNew);
add(jbRegister);
add(jtfShSh);
add(jtfCodeM);
add(jtfDateT);
add(jtfAddress);
add(jtfNameF);
add(jtfFamily);
add(jtfName);
add(jLAddress);
add(jLDateT);
add(jLCodem);
add(jLShSh);
add(jLNameF);
add(jLFamily);
add(jLName);

}

public static void main(String[] args) {
Form1 register = new Form1();
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(register);
register.setVisible(true);
register.setDefaultCloseOperation(WindowConstants. EXIT_ON_CLOSE);
} catch (Exception e) {
e.printStackTrace();
}

}

}

*ASRCH*
شنبه 10 اسفند 1387, 00:32 صبح
سلام :

دوست محترم جناب unhandled_event از شما تشکر میکنم بابت تغییرات روی کدها.

چون مبحث ما یه مبحث آموزشی هست اگر لطف کنید در مورد کلاس ها و متدهای که استفاده کردید توضیح هم بدید که خیلی ممنون میشم .

بعدش من اصلا با این بلاک try , catch مشکل دارم . میدونم برای استثناهاست ولی نمیدونم کی باید ازش استفاده کنم مثلا شما الان یه قسمتی رو اضافه کردید که از این بلاک استفاده شده خب اگر از این بلاک استفاده نمیکردید چی میشد ؟

unhandled_event
شنبه 10 اسفند 1387, 22:57 عصر
سلام

در کد بالا من اگر setLookAndFeel رو که پتانسیل Exception دادن داره داخل try-catch نمیذاشتم کامپایلر کد رو کامپایل نمیکرد تا تکلیف اون exception رو مشخص کنم.
برای مدیریت خطا به printStackTrace بسنده کردم اما میتونه بهتر از این باشه.
کلا بلاک try -catch -finally مکانیزم جاوا برای مدیریت خطاها یا بهتره بگیم استثناهاست وقتی میگیم "مدیریت" یعنی خطاهایی که رخ میدن رو به شکلی طبقه بندی کنیم و عکس العمل یا پیغام مناسب براش در برنامه در نظر بگیریم. درکل باید ببینیم کدی که مینویسیم پتانسیل بوجود آوردن چه خطایی رو داره بعنوان مثال اگر داریم فایل باز و بسته میکنیم ممکنه خطای I/O داشته باشیم و یا اگر داریم یک نوع کلاس رو به نوعی دیگه اصطلاحا cast میکنیم برای تبدیل نوع داده ،class cast exception بگیریم و ... بطور کلی استثناها زمانی رخ میدن که منطق یا ارتباط یا کدی نادرسته یا در حال بهم ریختن و یا خارج شدن از حالت نرمال یا برنامه میخواد crash کنه مثل معروفترین خطای جاوا که NullPointerException هست و زمانی رخ میده که بخوایم با آبجکتی کار کنیم که به هیچ کجا اشاره نمیکنه و هیچی توش نیست. اگر در زبان سی با این وضعیت روبرو بشیم و فکری نکرده باشیم برنامه قطعا crash میکنه.
تمام Exception های جاوا فرزند Throwable هستند یعنی کلاسهایی که قابلیت throw یا پرتاب شدن دارند. خطاها یا در متد جاری خودمون رخ میدن یا در متدهایی که ما اونها رو فراخوانی میکنیم. بعنوان مثال a متد b رو فراخوانی میکنه.
مثلا داریم :




public void b() throws MyException{
..
...
if (myerror) throw new MyException();
..
..
}

public void a() {
try {
b();
} catch (MyException e) {
......
}
}



اگر در متد a ما MyException رو بنحوی catch نکنیم کامپایلر خطا میده. چون در متد b گفتیم این throw میکند MyException را ، اما متد فراخواننده یعنی a به هیچ نحوی اون رو مدیریت نکرده. متد a اگر خواست میتونه مدیریت MyException رو بنحوی از سر خودش باز کنه و بده به فراخواننده خودش به این صورت :





public void a() throws MyException {
b();
}

ما میتونیم exception های خودمون رو در برنامه بصورت کلاس با ارث بری از Exception یا Throwable تعریف کنیم و از اونها استفاده کنیم.