0

私はコースワークのための休日推薦システムを書いています。CardLayout を使用する GUI。メイン クラスでは、コンストラクターで定義されたデフォルト名とアクセス レベルでユーザー オブジェクトが作成されます。このオブジェクトは、main から UserCard パネルに渡され、Login に渡されてログインされます。ユーザーが正常にログインすると、cardpanel は Login から Login に遷移し、ユーザーを呼び出してログインしているユーザーのユーザー名を表示することになっています。 .getUsername(); 方法。

私の問題はこうです。カード レイアウトが機能する方法のため、ユーザー オブジェクトが最初に作成された時点から、ユーザー名表示のパネルが UserCards のコンストラクターでデフォルト値で既に作成されています。cardlayout オブジェクトで show メソッドが呼び出された後に、このパネルを強制的に再描画する方法を見つける必要があります。以下は、問題の 3 つのクラスのコードです。(コードの貼り付けを関連するメソッドに制限しました)。

//the usercards panel

        public UserCards(User u)
    {
        CardLayout cl = new CardLayout();
        this.setLayout(cl);

        UserOptionsPanel options_card = new UserOptionsPanel(cl, this);
        RegisterPanel register_card = new RegisterPanel(cl, this);
        LoggedInPanel loggedin_card = new LoggedInPanel(cl, this, u);
        LoginPanel login_card = new LoginPanel(cl, this, u, loggedin_card);

        this.add(options_card, options);
        this.add(login_card, login);
        this.add(register_card, register);
        this.add(loggedin_card, loggedin);
    }

//the Loggin action listener user is passed in as a reference to the user object created in //main. the createUser(); method is a badly named method that simply calls setter methods on //the user object's fields

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        String[] vals = packData();
        try
        {
            DBConnection d = new DBConnection();
            Connection conn = d.getConnection();
            Validation v = new Validation(vals, user);
            v.getActual(conn);
            if(v.validate())
            {
                user = v.createUser();
                System.out.println(user.getUserName());
                l.revalidate();
                cl.show(pane, "loggedin");
            }
            else
            {
                lbl_statusmsg.setText("Password Incorrect");
                lbl_statusmsg.repaint();
            }

        }
        catch(ClassNotFoundException | SQLException ex)
        {
            ex.printStackTrace();
        }
    }

//the loggedin constructor

public class LoggedInPanel extends JPanel
{
    private User user;
    private JLabel lbl_details;
    public LoggedInPanel(CardLayout cl, Container pane, User u)
    {
        super();
        user = u;
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

        lbl_details = new JLabel();
        lbl_details.setText("Welcome "+user.getUserName());

        this.add(lbl_details);
    }    
}

私が過度に明確でなかったら、申し訳ありませんが、私は助けを求めることができません:)

4

1 に答える 1

0

みたいな意味ですか?

CardLayout cl = new CardLayout() {
  @Override
  public void show(java.awt.Container parent, String name) {
    super.show(parent, name);
    // your code here

  }
};
于 2013-03-18T13:06:07.813 に答える