我目前正在学习java并学习如何创建GUI。我正在尝试创建一个GUI
1)执行应用程序后,用户需要输入用户名和密码。 2)用户将被带到第二页,显示"欢迎来到第二页!"如果成功登录。
我声明了一个布尔变量(isLogin)来检查用户是否在LoginPageUI.java中的JButtton中输入了有效的用户名和密码。
我还创建了一个方法verifyLogin来返回布尔值(isLogin),无论是true还是false。
在我的主类(RunApp.java)中,我使用verifyLogin方法来检查是真还是假,但是即使我输入了正确的用户名,它似乎总是会返回false和密码(" a"和" 123")。
如何解决此问题?
LoginPageUI.java
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class LoginPageUI {
private boolean isLogin;
public LoginPageUI() {
}
public JPanel LoginUI () {
JPanel loginPanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
JLabel usernameLabel = new JLabel("username");
JLabel passwordLabel = new JLabel("password");
final JTextField usernameTF = new JTextField(20);
final JTextField passwordTF = new JTextField(20);
JButton loginBtn = new JButton("Login");
c.gridx = 0;
c.gridy = 1;
loginPanel.add(usernameLabel,c);
c.gridx = 1;
c.gridy = 1;
loginPanel.add(usernameTF,c);
c.gridx = 0;
c.gridy = 2;
loginPanel.add(passwordLabel,c);
c.gridx = 1;
c.gridy = 2;
loginPanel.add(passwordTF,c);
c.gridx = 1;
c.gridy = 3;
loginPanel.add(loginBtn,c);
loginBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String u = usernameTF.getText().toString();
String p = passwordTF.getText().toString();
if(u.equals("a") && p.equals("123")) {
isLogin = true;
}
}
});
return loginPanel;
}
public boolean verifyLogin() {
return isLogin;
}
}
PageTwo.java
import javax.swing.JLabel;
import javax.swing.JPanel;
public class PageTwo {
public PageTwo() {
}
public JPanel displayPageTwo() {
JLabel label = new JLabel("Welcome to Page Two!");
JPanel pTwoPanel = new JPanel();
pTwoPanel.add(label);
return pTwoPanel;
}
RunApp.java
import java.awt.CardLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class RunApp {
public static void main(String[] args) {
new RunApp();
}
public RunApp() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
CardLayout cardLayout = new CardLayout();
JFrame frame = new JFrame("testing");
JPanel panel = new JPanel();
panel.setLayout(cardLayout);
LoginPageUI lPage = new LoginPageUI();
PageTwo pageTwo = new PageTwo();
panel.add(lPage.LoginUI(),"1");
panel.add(pageTwo.displayPageTwo(),"2");
cardLayout.show(panel, "1");
if(lPage.verifyLogin() == true) {
cardLayout.show(panel, "2");
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
答案 0 :(得分:0)
如果您不介意使用javaFX,可以将isLogin更改为BooleanProperty并在RunApp中执行此操作:
lPage.loginProperty().addListener(new ChangeListener<Boolean>(){
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean arg1, Boolean arg2) {
if(lPage.verifyLogin())
cardLayout.show(panel, "2");
}
});
如果您需要编译示例,可以从此gist下载。