Sina.iRoid
دوشنبه 27 بهمن 1393, 13:38 عصر
سلام
دوستان من یه برنامه تمرینی ساده نوشتم. مشکلی که دارم در نحوه ساختن آبجکت هست. به کد نگاه کنید توضیح میدم.
کدکلاس TextFieldFrame:
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class TextFieldFrame extends JFrame {
private JTextField textField1; // text field with set size
private JTextField textField2; // text field constructed with text
private JTextField textField3; // text field with text and size
private JPasswordField passwordField; // password field with text
// Constructor
public TextFieldFrame() {
super("Window Demo");
setLayout(new FlowLayout());
// construct text field with 10 column
textField1 = new JTextField(10);
add(textField1);
// construct text field with default text
textField2 = new JTextField("Enter text here");
add(textField2);
// construct text field with default text and 21 column
textField3 = new JTextField("Uneditable text field", 21);
textField3.setEditable(false);
add(textField3);
// construct password field with default text
passwordField = new JPasswordField("Hidden text");
add(passwordField);
// register event handler
TextFieldHandler handler = new TextFieldHandler(this);
textField1.addActionListener(handler);
textField2.addActionListener(handler);
textField3.addActionListener(handler);
passwordField.addActionListener(handler);
}
// Getter
public JTextField getTextField1(){
return textField1;
}
public JTextField getTextField2(){
return textField2;
}
public JTextField getTextField3(){
return textField3;
}
}
کد کلاس TextFieldHandler:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class TextFieldHandler implements ActionListener {
// Object from TextFieldFrame class
TextFieldFrame txtFieldFrameObj;
// constructor
public TextFieldHandler(TextFieldFrame txtFieldFrameObj) {
this.txtFieldFrameObj = txtFieldFrameObj;
}
@Override
public void actionPerformed(ActionEvent e) {
String str = "";
// user pressed enter in JTextField textfield1
if (e.getSource() == txtFieldFrameObj.getTextField1()) {
str = String.format("textfield1: %s", e.getActionCommand());
// user pressed enter in JTextField textfield2
}else if (e.getSource() == txtFieldFrameObj.getTextField2()) {
str = String.format("textfield2: %s", e.getActionCommand());
// user pressed enter in JTextField textfield3
}else if (e.getSource() == txtFieldFrameObj.getTextField3()) {
str = String.format("textfield3: %s", e.getActionCommand());
// user pressed enter in JPasswordField passwordField
}else {
str = String.format("passwordField: %s", e.getActionCommand());
}
// display JTextField content
JOptionPane.showMessageDialog(null, str, "Reult", JOptionPane.INFORMATION_MESSAGE);
}
}
و کد کلاس اصلی:
import javax.swing.JFrame;
public class MainClass {
public static void main(String[] args) {
TextFieldFrame frame = new TextFieldFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(500, 500);
frame.setVisible(true);
}
}
الان برنامه بالا درست اجرا میشه. اما اگر در کلاس TextFieldHandler بجای ایجاد آبجکت به شکلی که نوشته شده، به صورت زیر آبجکت تعریف کنم، برنامه کرش می کنه و می نویسه که استک سر ریز شده؟ چرا؟؟ ممنون میشم اگر راهنماییم کنید.
TextFieldFrame txtFieldFrameObj = new TextFieldFrame();
دوستان من یه برنامه تمرینی ساده نوشتم. مشکلی که دارم در نحوه ساختن آبجکت هست. به کد نگاه کنید توضیح میدم.
کدکلاس TextFieldFrame:
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class TextFieldFrame extends JFrame {
private JTextField textField1; // text field with set size
private JTextField textField2; // text field constructed with text
private JTextField textField3; // text field with text and size
private JPasswordField passwordField; // password field with text
// Constructor
public TextFieldFrame() {
super("Window Demo");
setLayout(new FlowLayout());
// construct text field with 10 column
textField1 = new JTextField(10);
add(textField1);
// construct text field with default text
textField2 = new JTextField("Enter text here");
add(textField2);
// construct text field with default text and 21 column
textField3 = new JTextField("Uneditable text field", 21);
textField3.setEditable(false);
add(textField3);
// construct password field with default text
passwordField = new JPasswordField("Hidden text");
add(passwordField);
// register event handler
TextFieldHandler handler = new TextFieldHandler(this);
textField1.addActionListener(handler);
textField2.addActionListener(handler);
textField3.addActionListener(handler);
passwordField.addActionListener(handler);
}
// Getter
public JTextField getTextField1(){
return textField1;
}
public JTextField getTextField2(){
return textField2;
}
public JTextField getTextField3(){
return textField3;
}
}
کد کلاس TextFieldHandler:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class TextFieldHandler implements ActionListener {
// Object from TextFieldFrame class
TextFieldFrame txtFieldFrameObj;
// constructor
public TextFieldHandler(TextFieldFrame txtFieldFrameObj) {
this.txtFieldFrameObj = txtFieldFrameObj;
}
@Override
public void actionPerformed(ActionEvent e) {
String str = "";
// user pressed enter in JTextField textfield1
if (e.getSource() == txtFieldFrameObj.getTextField1()) {
str = String.format("textfield1: %s", e.getActionCommand());
// user pressed enter in JTextField textfield2
}else if (e.getSource() == txtFieldFrameObj.getTextField2()) {
str = String.format("textfield2: %s", e.getActionCommand());
// user pressed enter in JTextField textfield3
}else if (e.getSource() == txtFieldFrameObj.getTextField3()) {
str = String.format("textfield3: %s", e.getActionCommand());
// user pressed enter in JPasswordField passwordField
}else {
str = String.format("passwordField: %s", e.getActionCommand());
}
// display JTextField content
JOptionPane.showMessageDialog(null, str, "Reult", JOptionPane.INFORMATION_MESSAGE);
}
}
و کد کلاس اصلی:
import javax.swing.JFrame;
public class MainClass {
public static void main(String[] args) {
TextFieldFrame frame = new TextFieldFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(500, 500);
frame.setVisible(true);
}
}
الان برنامه بالا درست اجرا میشه. اما اگر در کلاس TextFieldHandler بجای ایجاد آبجکت به شکلی که نوشته شده، به صورت زیر آبجکت تعریف کنم، برنامه کرش می کنه و می نویسه که استک سر ریز شده؟ چرا؟؟ ممنون میشم اگر راهنماییم کنید.
TextFieldFrame txtFieldFrameObj = new TextFieldFrame();