从JButton返回一个值

时间:2014-07-08 15:27:04

标签: java swing

我目前正在学习java并学习如何创建GUI。我正在尝试创建一个GUI

1)执行应用程序后,用户需要输入用户名和密码。 2)用户将被带到第二页,显示"欢迎来到第二页!"如果成功登录。

  1. 我声明了一个布尔变量(isLogin)来检查用户是否在LoginPageUI.java中的JButtton中输入了有效的用户名和密码。

  2. 我还创建了一个方法verifyLogin来返回布尔值(isLogin),无论是true还是false。

  3. 在我的主类(RunApp.java)中,我使用verifyLogin方法来检查是真还是假,但是即使我输入了正确的用户名,它似乎总是会返回false和密码(" a"和" 123")。

  4. 如何解决此问题?

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

1 个答案:

答案 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下载。