2016-04-15 18 views
2

私はスタッフ管理システムを作成しています。ログインに成功すると、スタッフの詳細をログイン・フレームから他のフレームに渡す方法を知りたいと思います。成功したログインおよびコンストラクタを通してそれを渡すときJavaの値を別のフレームに渡す

私の現在の方法は、自分のデータを取得することです。

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); 
       } 

これは機能しますが、他の方法があるかどうかを知りたいと思います。

答えて

2

あなたの引数をコンストラクタで渡すのも構いませんが、オブジェクト上でクラスから渡す必要があるすべてのフィールドをカプセル化するオブジェクト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; 
     //... 
    } 
} 

次にあなたがHomeこのよう作成されます

これにより
public Home(Staff staff){ 

} 

のようなものに受信クラスのconstuctorを変更します。この方法について

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

メソッドやコンストラクタにあまりにも多くのパラメータを渡す必要がある場合は、それらを新しいクラスにラップし、そのクラスのインスタンスをメソッドに渡す方がよいでしょう。

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(); 
    } 
} 

あなたのプログラムでこれを行うだけで、すべてが簡単になります。

これをやりたくない場合は、おそらくあなたにとってベストな解決策はあなたのやり方だけですが、これは後で変更しやすく、理解しやすくなります。

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 
} 
関連する問題