[英]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.