PDA

View Full Version : اتصال دو فرم در جاوا



mohandesr
سه شنبه 21 مرداد 1393, 18:25 عصر
با سلام خدمت دوستان ، من تازه کار با جاوا رو شروع کردم و از اکلیپس استفاده می کنم حالا می خوام با ویندوز بیلدر یک فرم بسازم و داخل این فرم یک دکمه بزارم که با کلیک روی آن فرم دوم باز شود و سوال دوم اینکه یک دکمه دیگر نیز بگذارم که با کلیک روی آن اطلاعاتی که در فرم در تکست ها پر کرده ام پاک شود تا اطلاعات نفر بعد را پر کنم ، خواهش می کنم اگه کسی بلده که حتما بلده کمکم کنه

manoto1371
سه شنبه 21 مرداد 1393, 21:05 عصر
با یاد خدا و باسلام
برای پاک کردن جعبه های متن کافیست در رویداد دکمه دستورات پاک کردن جعبه ها را قرار بدید.
برای فرم ها هم باید از متد setVisible() فرم ها استفاده کنید.
موفق باشید

mohandesr
چهارشنبه 22 مرداد 1393, 09:41 صبح
با سلام و تشکر از پاسختان ، من برای اتصال از این دستورات استفاده کردم ولی جواب نگرفتم
MyNewWindowClass newWindow = new MyNewWindowClass();
newWindow.setVisible(true);
اگه میشه بیشتر راهنمایی کنید ، ممنون

mohandesr
چهارشنبه 22 مرداد 1393, 19:15 عصر
سلام آقا یا خانمی که جواب منو دادین تو رو خدا منو بیشتر با یک مثال یا تکه کد راهنمایی کنین من منتظرم ، ممنون

mr.dp+
پنج شنبه 23 مرداد 1393, 00:34 صبح
از این دو تا آموزش (ویدیویی و نوشته) استفاده کنید . برای سوال اولتون :)
http://www.codeproject.com/Questions/566071/openplusaplusnewplusjframeplusonplusaplusbuttonplu
www.youtube.com/watch?v=MCscrDFGLb0

برای سوال دومتون هم ، وقتی که کاربر فرم رو پر میکنه (فیلدها رو) و گزینه ی ثبت رو میزنه ، بعد برای پاک کردن اون فیلد میتونید از متد setText استفاده بکنید . مثلا

String text = jTextField1.getText();
jTextField1.setText("");

که در اینجا ، خط اول همون متنی هستش که از کاربر گرفته میشه و شما مشکلی با این ندارید . خط دومی هم همونطور که واضعه ، رشته ی داخل jTextField1 رو پاک میکنه ، ""

vahid-p
پنج شنبه 23 مرداد 1393, 13:39 عصر
اینم یه مثال:
فقط در مورد clearButton یه توضیح بدم، به خاطر اینکه ممکنه تعداد JTextField هات زیاد باشه و نخوای یکی یکی پاکش کنی، کل کامپوننت های Frame اصلی رو میگیریم و اگر JTextField بود اونو پاک میکنیم.

Form.java

import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Form extends JFrame {

private JTextField textField1;
private JTextField textField2;
private JTextField textField3;
private JButton submitButton;
private JButton clearButton;
private ResultForm resultForm;

public Form() {
super();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(200, 175);
setLayout(new FlowLayout());
textField1 = new JTextField(15);
textField2 = new JTextField(15);
textField3 = new JTextField(15);
submitButton = new JButton("Submit");
clearButton = new JButton("Clear All");
add(textField1);
add(textField2);
add(textField3);
add(clearButton);
add(submitButton);

//Event Handler
submitButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
resultForm = new ResultForm(textField1.getText(), textField2.getText(), textField3.getText());
resultForm.setVisible(true);
}
});
clearButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
Component[] components = Form.this.getContentPane().getComponents();

for (Component c : components) {
if (c instanceof JTextField) {
((JTextField) (c)).setText("");
}
}
}
});
}
//Main
public static void main(String[] args) {
new Form().setVisible(true);
}
}


فرم نمایش نتیجه :
ResultForm.java

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ResultForm extends JFrame {

private JLabel label1;
private JLabel label2;
private JLabel label3;

public ResultForm(String field1, String field2, String field3) {
super();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(150, 200);
setLayout(new FlowLayout());
label1 = new JLabel(field1);
label2 = new JLabel(field2);
label3 = new JLabel(field3);
add(label1);
add(label2);
add(label3);
}

}

[/JAVA]

mohandesr
جمعه 24 مرداد 1393, 10:09 صبح
خیلی ممنون از لطف شما دوستان که به من جواب دادین ولی من با swing کار نمی کنم و با swt کار می کنم میشه کد های مربوط به اون رو بهم بگین یه سوال دیگه اینکه من برای ایجاد فرم دوم باید روی فرم اولم کلیک راست کنم و فرم دومم رو بسازم واقعا موندم میشه مسیر دقیقشو بهم بگین خیلی بهش احتیاج دارم ، با تشکر فراوان

vahid-p
جمعه 24 مرداد 1393, 16:46 عصر
کدهای Swing و Awt تفاوت زیادی ندارن. مثلا JTextField برای Swing هست و TextField برای awt و برای JButton و... هم به همین صورت. کلاس هم که اکستند شده از JFrame هست بنویس Frame. البته بعضی متدها مثل setDefaultCloseOperation(EXIT_ON_CLOSE); که تو خط 20 کلاس Form و 13 کلاس ResultForm هست رو در AWT نداریم که در عوض باید از addWindowListener و به این صورت یا هر کد دیگه ای که میخوای استفاده کنی :

addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});


اما برای اینکه به جای چپ کلیک از راست کلیک استفاده کنید، از ActionListener استفاده نمیشه و از MouseListener استفاده میشه ( البته به جای ActionListener حتی برای چپ کلیک هم میشه از MouseListener استفاده کرد. ActionListener به اعمال متداول گفته میشه. مثلا برای دکمه کلیک چپ یا برای فیلد ها Enter اینا جاهایین که از ActionEvent استفاده میشه ).
به جای خط 35 تا 42 کلاس Form مینویسی :

submitButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
resultForm = new ResultForm(textField1.getText(), textField2.getText(), textField3.getText());
resultForm.setVisible(true);
}
}
});

اینجا منظور از Button3 همون راست کلیک هست.

mohandesr
جمعه 24 مرداد 1393, 18:39 عصر
آقا ی وحید شرمنده من دوباره می پرسم چرا کدهای شما کلا با من فرق داره من با اکلیپس دارم کار می کنم و کدهام به صورت زیره خطا نداره ولی جواب هم نمی ده میشه شما ببینید من فرم اصلیم فرم کاربر است و می خوام از داخل اون فرم 2 رو صدا بزنم . ممنون


import org.eclipse.swt.widgets.Decorations;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.ui.forms.widgets.Form;

@SuppressWarnings("unused")
public class karbar {
protected static final String Control = null;
protected Shell shell;
private Text text;
private Text text_1;
private Text text_2;
protected form2 form2;

/**
* Launch the application.
* @param args
*/

public static void main(String[] args) {
try {
karbar window = new karbar();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(530, 426);
shell.setText("\u0641\u0631\u0645 \u06A9\u0627\u0631\u0628\u0631");

Label label = new Label(shell, SWT.NONE);
label.setBounds(298, 19, 212, 15);
label.setText("\u06A9\u0627\u0631\u0628\u0631 \u06AF\u0631\u0627\u0645\u06CC \u0644\u0637\u0641\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062A \u0632\u06CC\u0631 \u0631\u0627 \u06A9\u0627\u0645\u0644 \u06A9\u0646\u06CC\u062F ");

Label label_1 = new Label(shell, SWT.NONE);
label_1.setBounds(446, 56, 55, 15);
label_1.setText("\u0646\u0627\u0645 \u0633\u0631\u0648\u06CC\u0633");

text = new Text(shell, SWT.BORDER);
text.setBounds(203, 56, 216, 21);

Label label_2 = new Label(shell, SWT.NONE);
label_2.setBounds(356, 101, 163, 15);
label_2.setText("\u062A\u0648\u0635\u06CC\u0641 \u062F\u0642\u06CC\u0642 \u0633\u0631\u0648\u06CC\u0633 \u062F\u0631\u062E\u0648\u0627\u0633\u062A\u06CC");

text_1 = new Text(shell, SWT.BORDER);
text_1.setBounds(25, 103, 297, 21);

Label label_3 = new Label(shell, SWT.NONE);
label_3.setBounds(291, 156, 212, 15);
label_3.setText("\u0627\u0646\u062A\u0638\u0627\u0631\u0627\u062A\u 06CC \u06A9\u0647 \u0627\u0632 \u062A\u0627\u0645\u06CC\u0646 \u06A9\u0646\u0646\u062F\u0647 \u0633\u0631\u0648\u06CC\u0633 \u062E\u0648\u062F \u062F\u0627\u0631\u06CC\u062F ");

text_2 = new Text(shell, SWT.BORDER);
text_2.setBounds(21, 155, 262, 21);

Button button = new Button(shell, SWT.NONE);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {

text.setText("");
text_1.setText("");
text_2.setText("");
}
});

button.setBounds(152, 241, 105, 25);
button.setText("\u062F\u0631\u062E\u0648\u0627\u0633\u062A \u062C\u062F\u06CC\u062F ");

Button button_1 = new Button(shell, SWT.NONE);
button_1.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
form2= new form2();
form2.SetVisible(true);

}
});
button_1.setBounds(284, 241, 117, 25);
button_1.setText("\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0637\u0644\u0627\u0639\u0627\u062A \u06A9\u0627\u0631\u0628\u0631 ");
}
protected void setVisible(boolean b) {
// TODO Auto-generated method stub

}

}

vahid-p
شنبه 25 مرداد 1393, 03:28 صبح
آها من فکر کردم AWT رو میگید. swt یه کتابخونه دیگست. البته تفاوتی بین نت بینز و اکلیپس وجود نداره و SWT جز کتابخونه استاندارد جاوا نیست و باید به پروژه الحاق کنی. از طرفی چون به سیستم عامل وابستست، پیشنهاد میکنم ازش استفاده نکنید. الان مثلا من باید برم نسخه ویندوز 64 بیت این کتابخونه رو دانلود کنم. یه بار اشتباهی دانلود کردم اررور داد. اما الان اجرا میشه.
ولی بهتر بود از Swing یا فوقش AWT استفاده میکردی.

من از نت بینز استفاده میکنم ( و البته گفتم تفاوتی بین این دو نیست ) و برنامتون اجرا میشه، روی دکمه هاش کلیک میکنی کاری که گفتی رو انجام میده و مشکلی نداره.
اینم اسکرین شات : ( form2 هم از ResultForm بالا استفاده کردم )
122312

mohandesr
شنبه 25 مرداد 1393, 09:33 صبح
بازم سلام آقای وحید ممنون از لطف و توجه زیادتون ، برای منم دکمه درخواست جدید که می خوام تکست ها پاک بشه اجرا میشه ولی دکمه استخراج اطلاعات کاربر رو که می خوام با زدنش فرم 2 نمایش داده بشه اجرا نمی کنه حسابی کلافم کرده ، فرم 2 هم به صورت زیره شما می تونید بگید اشکال کار من کجاست ، بازم ممنونم اگه بهم کمک کنید
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;

public class form2 {
protected Shell shlForm;
private Text text;
private Text text_1;
private Text text_2;
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
try {
form2 window = new form2();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shlForm.open();
shlForm.layout();
while (!shlForm.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shlForm = new Shell();
shlForm.setSize(450, 300);
shlForm.setText("form2");

text = new Text(shlForm, SWT.BORDER);
text.setBounds(141, 42, 173, 21);

Button btnNewButton = new Button(shlForm, SWT.NONE);
btnNewButton.setBounds(257, 208, 75, 25);
btnNewButton.setText("\u062B\u0628\u062A \u0627\u0637\u0644\u0627\u0639\u0627\u062A");

Label lblNewLabel = new Label(shlForm, SWT.NONE);
lblNewLabel.setBounds(352, 45, 55, 15);
lblNewLabel.setText("\u0648\u0631\u0648\u062F\u06CC");

Label lblNewLabel_1 = new Label(shlForm, SWT.NONE);
lblNewLabel_1.setBounds(352, 101, 55, 15);
lblNewLabel_1.setText("\u062E\u0631\u0648\u062C\u06CC");

text_1 = new Text(shlForm, SWT.BORDER);
text_1.setBounds(141, 98, 173, 21);

Label label = new Label(shlForm, SWT.NONE);
label.setBounds(352, 164, 55, 15);
label.setText("\u067E\u06CC\u0634 \u0634\u0631\u0627\u06CC\u0637");

text_2 = new Text(shlForm, SWT.BORDER);
text_2.setBounds(141, 158, 173, 21);

Button button = new Button(shlForm, SWT.NONE);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
text.setText("");
text_1.setText("");
text_2.setText("");
}
});
button.setBounds(155, 208, 75, 25);
button.setText("\u0627\u0637\u0644\u0627\u0639\u0627\u062A \u062C\u062F\u06CC\u062F");
}
public void SetVisible(boolean b) {
// TODO Auto-generated method stub

}
}

vahid-p
شنبه 25 مرداد 1393, 15:39 عصر
خب دلیل اینکه پنجره form2 اجرا نمیشه اینه که شما از کانستراکتور استفاده نکردید و همچنین SetVisible تون هیچ چیزی توش نیست!!!
ببینید تابع public static void main فقط در یک کلاس باید باشه و عملا در بقیه کلاس ها بی معنیه. چون کلاس شروع کننده رو مشخص میکنه و هر برنامه یک شروع داره.
شما در کلاس karbar اومدید form2 رو new کردید ولی form2 نه کانستراکتوری داره و نه SetVisible.کانستراکتور نباشه مسئله خاصی نیست ولی قشنگتره باشه. فرضا این هیچی. ولی لا اقل کدهای SetVisible رو مینوشتید. الان بخشی که شما در public static void main نوشتید در کلاس form2 اصلا اجرا نمیشه. چون کلاس karbar کلاس main است. پس کافیه اون بخش رو تو کلاس form2 پاک کنید و در کانستراکتور ( که در هر بار ایجاد آبجکت از کلاس اجرا میشه ) یا در SetVisible بنویسید.
من فکر میکنم اندکی در مفاهیم مشکل دارید و بهتره بیشتر رو مفاهیم کار کنید که کانستراکتور کی استفاده میشه و ... .
نکات نگارشی هم هست. مثلا متد SetVisible بهتره به صورت setVisible نوشته بشه. یا اسم کلاس به جای karbar از Karbar و... ( این اهمیت زیادی نداره ولی برای قشنگی و یک دستی با کدهای جاوا گفتم )
کد form2 به این صورت درست کار میکنه : ( یه نکته دیگه اینکه شما در نت بینز یا اکلیپس و کلا در جاوا میتونید از کاراکترهای فارسی استفاده کنید و مثل برخی از زبانها نیازی نیست معادل عددیش رو وارد کنید. مثلا به جای اینکه کاربر رو با اعداد /u233 ,, بنویسید، مستقیم بنویسید "کاربر" )

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;

public class form2 {

protected Shell shlForm;
private Text text;
private Text text_1;
private Text text_2;

/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shlForm.open();
shlForm.layout();
while (!shlForm.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}

/**
* Create contents of the window.
*/
protected void createContents() {
shlForm = new Shell();
shlForm.setSize(450, 300);
shlForm.setText("form2");

text = new Text(shlForm, SWT.BORDER);
text.setBounds(141, 42, 173, 21);

Button btnNewButton = new Button(shlForm, SWT.NONE);
btnNewButton.setBounds(257, 208, 75, 25);
btnNewButton.setText("\u062B\u0628\u062A \u0627\u0637\u0644\u0627\u0639\u0627\u062A");

Label lblNewLabel = new Label(shlForm, SWT.NONE);
lblNewLabel.setBounds(352, 45, 55, 15);
lblNewLabel.setText("\u0648\u0631\u0648\u062F\u06CC");

Label lblNewLabel_1 = new Label(shlForm, SWT.NONE);
lblNewLabel_1.setBounds(352, 101, 55, 15);
lblNewLabel_1.setText("\u062E\u0631\u0648\u062C\u06CC");

text_1 = new Text(shlForm, SWT.BORDER);
text_1.setBounds(141, 98, 173, 21);

Label label = new Label(shlForm, SWT.NONE);
label.setBounds(352, 164, 55, 15);
label.setText("\u067E\u06CC\u0634 \u0634\u0631\u0627\u06CC\u0637");

text_2 = new Text(shlForm, SWT.BORDER);
text_2.setBounds(141, 158, 173, 21);

Button button = new Button(shlForm, SWT.NONE);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
text.setText("");
text_1.setText("");
text_2.setText("");
}
});
button.setBounds(155, 208, 75, 25);
button.setText("\u0627\u0637\u0644\u0627\u0639\u0627\u062A \u062C\u062F\u06CC\u062F");
}

public void SetVisible(boolean b) {
try {
form2 window = new form2();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
}

mohandesr
شنبه 25 مرداد 1393, 17:37 عصر
آقای وحید نمی دونم چطور از شما تشکر کنم بالاخره درست شد ، آره حق با شماست من هنوز مفاهیمو خوب نشناختم آخه همانطور که گفتم من تازه کار هستم و از روی اجبار به خاطر پایان نامه وارد این مقوله شدم و نمی دونم می تونم رو کمک شما حساب کنم یا نه ؟ حالا قدم بعدیم اینه که می خوام اطلاعات فرم 2 رو تو پایگاه داده ثبت کنم ، از SQL 2008 می خوام استفاده کنم و اینکه JDBC4 رو دانلود کردم و به اکلیپس اضافه کردم حالا دیگه از این به بعدشو نمی دونم چیکار کنم و چجوری بین پایگاه داده و اکلیپس اتصال برقرار کنم ، آیا شما در این زمینه نیز اطلاعات دارید که کمکم کنید ؟ اگر نه که بازم تا اینجاشم که کمکم کردین همیشه ممنونتونم !!!!!!!!!! ( از اینکه جوابمو با سرعت می دین ممنون )

vahid-p
یک شنبه 26 مرداد 1393, 03:26 صبح
شاید جالب نباشه تو این تاپیک در مورد Database صحبت کنیم. ولی در کل کار با دیتابیس وقتی Driver اش رو داشته باشی تقریبا بین دیتابیس های مختلف یکسانه. در اصل شما یه کاری رو انجام میدید و درایور خود دیتابیس درخواستتون که به صورت سینتکس sql است رو طبق ساختار خودش اجرا میکنه.

فکر میکنم این لینک بتونه کمکتون کنه :
http://www.programcreek.com/2010/05/java-code-for-connecting-ms-sql-server-by-using-sql-server-authentication/

شما کدش رو با شرایط برنامتون بنویسید، مشکلی داشت در یک تاپیک مجزا مطرح کنید.

mohandesr
یک شنبه 26 مرداد 1393, 09:37 صبح
باشه اقای وحید ولی می ترسم شما رو از دست بدم و کسی دیگه ای بهم کمک نکنه ، فقط یه سوال کوچولو میشه تنظیمات کلی اضافه کردن JDBC رو به اکلیپس بهم بگید من از مسیر زیر این کارو انجام دادم نمی دونم درسته یا نه :
اول JDBC4 رو دانلود کردم دو تا فایل jar داشت ، بعد رو همین پروژه راست کلیک کردم و بعد Build path و بعد dd jar رو زدم و بعدsqljdbc زیر همین فرم کاربر اومد ولی حالا مشکل من اینه که از کجا بفهمم که اتصال من برقرار شده ، و این کدهایی که تو لینک شما هست رو باید کجا وارد کنم ؟فکر کنم یه تنظیمات کلی تو خود کامپیوتر باید انجام بدم که من نمی دونم تو رو خدا راهنماییم کنید وقت زیادی ندارم

mr.dp+
یک شنبه 26 مرداد 1393, 11:30 صبح
دوست عزیز شما فقط کافیه اراده کنی و یه جستجو تو گوگل یا ... انجام بدی (انگلیسی)
در خیلی از سایت ها یا فروم ها جواب این سوالات داده شده و مزیتشم اینه که شما مجبور نیستی برای هر سوال چند ساعت صبر کنی !