Java将值传递给另一个帧

时间:2016-04-15 07:30:03

标签: java oop

我正在创建员工管理系统,我想知道如何在成功登录时将员工的详细信息从登录框传递到其他框架。

我当前的方法是在成功登录时检索他们的数据并将其传递给构造函数。

if(checkPassword.equals(password)&&checkStaffId.equals(staffId)){
                    close();
                    String name = temp.getName();
                    String position = temp.getPosition();
                    String imageSrc = temp.getImageSRC();
                    String email = temp.getEmail();
                    Home page = new Home(staffId,name,position,imageSrc,email);
                    page.setVisible(true);
                    MainInterface menu = new MainInterface(staffId,name,position,imageSrc,email);
                    form b = new form(staffId,name,position,imageSrc,email);
                    Patients a = new Patients(staffId,name,position,imageSrc,email);
                    AdminMenu admin = new AdminMenu(staffId,name,position,imageSrc,email);
                    MainRpt r = new MainRpt(staffId,name,position,imageSrc,email);
                    viewSchedule s = new viewSchedule(staffId,name,position,imageSrc,email);
                }

它有效,但我想知道是否有其他方法可以做到这一点。

4 个答案:

答案 0 :(得分:2)

可以通过构造函数传递参数,但创建一个Object Staff以封装需要从类传递到另一个的所有字段更加灵活。

public class Staff {
    private String name;
    private String position;
    private String imageSrc;
    private String email;

    public Staff(Object temp){ // Change object here to the "temp" type
       this.name = name;
       //...
    }
}

然后将接收类的构造更改为

public Home(Staff staff){

}

通过这种方式,您将以这种方式创建Home

Staff staff = new Staff(temp); 
Home page = new Home(staff);

答案 1 :(得分:1)

使用框架时,通常你会有一个更大的类,一个控制器,它包含视图并将它们与模型连接起来(检查MVC)。

长话短说,你应该(你没有 来,但在我看来这是最好的方法)做这样的事情:

注意:这与您的代码无关,只是为了展示MVC的一个例子。

class Model {
    int firstNumber;
    int secondNumber;

    public int add () {
        return firstNumber + secondNumber;
    }
}

class View extends JFrame {

    JTextArea first;
    JTextArea second;

    JLabel result;

    // do necessary stuff to show the JFrame, and add this TextAreas and the label
}

class Controller {
    Model model;
    View view;

    // Initialize both in the constructor

    public void add() { // This can be called when you press certain button, for example
        model.firstNumber = view.first;
        model.secondNumber = view.second; // THIS IS PSEUDO CODE, you have to convert it and stuff

        view.result = model.add();
    }
}

你应该在你的程序中做这样的事情,一切都会更容易。

如果您不想这样做,那么对您来说最好的解决方案可能就是您正在做的事情或者类似的事情,但之后更容易修改,更容易理解。

答案 2 :(得分:1)

这样怎么样?你不需要一次又一次地传递许多参数。我只是建议你,但我还没有测试过。

if(checkPassword.equals(password)&&checkStaffId.equals(staffId)){
    close();
    StaffInfo staffInfo =  new StaffInfo();
    staffInfo.setName(temp.getName());
    staffInfo.setPosition(temp.getPosition());
    staffInfo.imageSrc(temp.getImageSRC());
    staffInfo.setEmail(temp.getEmail());

    Home page = new Home(staffInfo);
    page.setVisible(true);
    MainInterface menu = new MainInterface(staffInfo);

    form b = new form(staffInfo);
    Patients a = new Patients(staffInfo);
    AdminMenu admin = new AdminMenu(staffInfo);
    MainRpt r = new MainRpt(staffInfo);
    viewSchedule s = new viewSchedule(staffInfo);
}         

public class StaffInfo {

    private String name ;
    private String position;
    private String imageSrc;
    private String email;

    // Getters and setters
}

答案 3 :(得分:0)

如果需要向方法(或构造函数)传递太多参数,最好将它们包装在新类中,并将该类的实例传递给方法。