Sina.iRoid
چهارشنبه 28 آبان 1393, 10:39 صبح
سلام.
دوستان، برنامه ای که در زیر نوشتم خیلی سادست. اما دوست دارم به صورت شی گرا برنامه رو بنویسم برای همین به مشکل خورم.
برنامه به این صورت هست که وقتی که روی فیلد ها دکمه اینتر و فشار می دیم، یک کادر گفتگو ایی باز میشه و یه پیغامی و نمایش میده. اما برنامه موقعی که دکمه اینتر و فشار میدیم کرش می کنه. نمی دونم مشکل از کجاست؟
درضمن در مورد شی گرا بدون برنامه هم اگر میشه نظرتون و بیان کنید. اینکه برنامه چقدر ایراد داره تا کاملا به صورت درست شی گرا نوشته بشه. ممنون. کد های برنامه رو در زیر می بینید:
کد کلاس FrameFields:
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public final class FrameFields{
private JTextField textField1; //text field with set size
private JTextField textField2; //text field construct with text
private JTextField textField3; //text field with text and size
private JPasswordField passwordField; //password field with text
//getter and setter
public JTextField getTextField1(){
return textField1;
}
public void setTextField1(JTextField textField1){
this.textField1 = textField1;
}
public JTextField getTextField2(){
return textField2;
}
public void setTextField2(JTextField textField2){
this.textField2 = textField2;
}
public JTextField getTextField3(){
return textField3;
}
public void setTextField3(JTextField textField3){
this.textField3 = textField3;
}
public JPasswordField getPasswordField(){
return passwordField;
}
public void setPasswordField(JPasswordField passwordField){
this.passwordField = passwordField;
}
}
کد کلاس MainFrame:
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class MainFrame extends JFrame{
//object from FrameFields
FrameFields ob = new FrameFields();
//Constructor
public MainFrame() {
super("JTextField And JPasswordField");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//text field1
ob.setTextField1(new JTextField(10));
add(ob.getTextField1());
//text field2
ob.setTextField2(new JTextField("Sina"));
add(ob.getTextField2());
//text field3
ob.setTextField3(new JTextField("Uneditable text field", 15));
ob.getTextField3().setEditable(false);
add(ob.getTextField3());
//password field
ob.setPasswordField(new JPasswordField("sdiRoid1372", 10));
add(ob.getPasswordField());
//register event handler
TextFieldHandler handler = new TextFieldHandler();
ob.getTextField1().addActionListener(handler);
ob.getTextField2().addActionListener(handler);
ob.getTextField3().addActionListener(handler);
ob.getPasswordField().addActionListener(handler);
}
}
کد کلاس TextFieldHandler:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class TextFieldHandler implements ActionListener{
//default constructor
public TextFieldHandler() {}
private FrameFields ob;
//Constructor
public TextFieldHandler(FrameFields ob) {
this.ob = ob;
}
@Override
public void actionPerformed(ActionEvent e) {
String result;
if (e.getSource() == ob.getTextField1()) {
result = String.format("TextField1: %s", e.getActionCommand());
}
else if (e.getSource() == ob.getTextField2()) {
result = String.format("TextField2: %s", e.getActionCommand());
}
else if (e.getSource() == ob.getTextField3()) {
result = String.format("TextField3: %s", e.getActionCommand());
}else{
result = String.format("PasswordField: %s", e.getActionCommand());
}
//display result
JOptionPane.showMessageDialog(null, result, "Result", JOptionPane.PLAIN_MESSAGE);
}
}
و کد کلاس اصلی:
public class DriverClass {
public static void main(String[] args) {
MainFrame ob = new MainFrame();
ob.setSize(300, 400);
ob.setVisible(true);
}
}
ممنون اگر راهنماییم کنید.
دوستان، برنامه ای که در زیر نوشتم خیلی سادست. اما دوست دارم به صورت شی گرا برنامه رو بنویسم برای همین به مشکل خورم.
برنامه به این صورت هست که وقتی که روی فیلد ها دکمه اینتر و فشار می دیم، یک کادر گفتگو ایی باز میشه و یه پیغامی و نمایش میده. اما برنامه موقعی که دکمه اینتر و فشار میدیم کرش می کنه. نمی دونم مشکل از کجاست؟
درضمن در مورد شی گرا بدون برنامه هم اگر میشه نظرتون و بیان کنید. اینکه برنامه چقدر ایراد داره تا کاملا به صورت درست شی گرا نوشته بشه. ممنون. کد های برنامه رو در زیر می بینید:
کد کلاس FrameFields:
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public final class FrameFields{
private JTextField textField1; //text field with set size
private JTextField textField2; //text field construct with text
private JTextField textField3; //text field with text and size
private JPasswordField passwordField; //password field with text
//getter and setter
public JTextField getTextField1(){
return textField1;
}
public void setTextField1(JTextField textField1){
this.textField1 = textField1;
}
public JTextField getTextField2(){
return textField2;
}
public void setTextField2(JTextField textField2){
this.textField2 = textField2;
}
public JTextField getTextField3(){
return textField3;
}
public void setTextField3(JTextField textField3){
this.textField3 = textField3;
}
public JPasswordField getPasswordField(){
return passwordField;
}
public void setPasswordField(JPasswordField passwordField){
this.passwordField = passwordField;
}
}
کد کلاس MainFrame:
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class MainFrame extends JFrame{
//object from FrameFields
FrameFields ob = new FrameFields();
//Constructor
public MainFrame() {
super("JTextField And JPasswordField");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//text field1
ob.setTextField1(new JTextField(10));
add(ob.getTextField1());
//text field2
ob.setTextField2(new JTextField("Sina"));
add(ob.getTextField2());
//text field3
ob.setTextField3(new JTextField("Uneditable text field", 15));
ob.getTextField3().setEditable(false);
add(ob.getTextField3());
//password field
ob.setPasswordField(new JPasswordField("sdiRoid1372", 10));
add(ob.getPasswordField());
//register event handler
TextFieldHandler handler = new TextFieldHandler();
ob.getTextField1().addActionListener(handler);
ob.getTextField2().addActionListener(handler);
ob.getTextField3().addActionListener(handler);
ob.getPasswordField().addActionListener(handler);
}
}
کد کلاس TextFieldHandler:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class TextFieldHandler implements ActionListener{
//default constructor
public TextFieldHandler() {}
private FrameFields ob;
//Constructor
public TextFieldHandler(FrameFields ob) {
this.ob = ob;
}
@Override
public void actionPerformed(ActionEvent e) {
String result;
if (e.getSource() == ob.getTextField1()) {
result = String.format("TextField1: %s", e.getActionCommand());
}
else if (e.getSource() == ob.getTextField2()) {
result = String.format("TextField2: %s", e.getActionCommand());
}
else if (e.getSource() == ob.getTextField3()) {
result = String.format("TextField3: %s", e.getActionCommand());
}else{
result = String.format("PasswordField: %s", e.getActionCommand());
}
//display result
JOptionPane.showMessageDialog(null, result, "Result", JOptionPane.PLAIN_MESSAGE);
}
}
و کد کلاس اصلی:
public class DriverClass {
public static void main(String[] args) {
MainFrame ob = new MainFrame();
ob.setSize(300, 400);
ob.setVisible(true);
}
}
ممنون اگر راهنماییم کنید.