簡體   English   中英

將值從JPanel類傳遞到JFrame類

[英]passing values from JPanel class to JFrame class

我有一個JFrame,它使用從JPanel初始化的JPanel。

這是JFrame類:LoginPage

public class LoginPage extends JFrame
{
private JPanel contentPane;
static int cnf;
static String data;
private static LoginPage frame;

/**
 * Launch the application.
 */
public static void main(String[] args)
{
    EventQueue.invokeLater(new Runnable()
    {
        public void run()
        {
            try
            {
                frame = new LoginPage();
                frame.setVisible(true); 
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    });

    //cnf = chk;
    if( cnf == 1)
    {
        frame.dispose();
        JFrame m = new MainPage();
        m.setVisible(true);
    }
}

/**
 * Create the frame.
 */
public LoginPage()
{
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JPanel m = new MainLogin();
    m.setBounds(0, 0, 448, 271);
    contentPane.add(m);
}
}

而且,這是JPanel類:MainLogin

public class MainLogin extends JPanel
{
private JTextField uname;
private JPasswordField pass;
public static int chk;

public MainLogin()
{
    setLayout(null);

    uname = new JTextField();
    uname.setBounds(236, 22, 167, 25);
    add(uname);
    uname.setColumns(10);

    pass = new JPasswordField();
    pass.setBounds(236, 53, 167, 25);
    add(pass);

    JButton login = new JButton("Login");
    login.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            String u = uname.getText();
            char[] tp = pass.getPassword();
            String p = new String(tp);

            chk = authentication.verify(u, p);
            System.out.println(chk);
        }
    });
    login.setBounds(235, 90, 117, 25);
    add(login);
}
}

就像在MainLogin面板中一樣,有一個類authentication ,該類具有一個方法verify() ,該方法返回一個整數,並且該整數存儲在chk 由於此chk駐留在MainLogin JPanel類中,因此我想將其傳遞給LoginPage JFrame類。 除了使用文件之外,還有其他方法嗎?

LoginPage實例而不是從main方法打開主頁。

LoginPage添加一個login()方法

public class LoginPage extends JFrame {

    //other parts

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                try
                {
                    frame = new LoginPage();
                    frame.setVisible(true); 
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
    }

    public LoginPage() {
        //...
        JPanel m = new MainLogin(this);
        //...
    }

    public void login(int chk) {
        JFrame m = new MainPage();
        m.setVisible(true);
        this.dispose();
    }
}

並將登錄框架作為參數傳遞給面板

public class MainLogin extends JPanel
{

private int chk;//no need to be static

public MainLogin(final LoginFrame loginFrame)
{
    setLayout(null);//null layout is bad

    //...
    login.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            //...
            chk = authentication.verify(u, p);
            loginFrame.login(chk);
        }
    });
    //...
}
}

這個問題不僅被問了很多,還提供了許多可能的解決方案,包括根據您的需要使用模式對話框或觀察者模式

有關更多詳細信息,請參見如何制作對話框

您可能還想看看

有關該主題的更多討論

這里的基本答案是,您想將責任領域分開。

你需要:

  • 收集用戶憑證
  • 驗證那些憑證
  • 根據檢查的成功采取適當的措施

這是三個截然不同的動作,所有這些動作都應該分開,不是登錄面板來驗證憑據的責任,那是其他人的責任,同樣,也不是驗證者的責任來決定驗證失敗或成功時應采取的措施,那是別人的責任

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM