【问题标题】:returning a value from JButton从 JButton 返回一个值
【发布时间】:2014-07-08 15:27:04
【问题描述】:

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

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

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

  2. 我还创建了一个方法 verifyLogin 来返回 boolean(isLogin) 是真还是假。

  3. 在我的主类 (RunApp.java) 中,我使用 verifyLogin 方法来检查是真还是假,但是即使我输入了正确的用户名和密码(" 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);
        }
    });
}

【问题讨论】:

  • 方法RunGame是做什么的?它在哪里?
  • 对不起。应该是我编辑的 RunApp。

标签: java swing


【解决方案1】:

如果您不介意使用 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 下载。

【讨论】:

  • 我正在使用 eclipse,我想 eclipse 不支持 javafx?
  • 可以,但是根据您的 JRE 版本(即 java 7),您必须在 classpath 中添加 jfxrt.jar。如果您使用的是 Windows,它可能位于“C:\Program Files (x86)\Java\jdk1.7.0_60\jre\lib”中。
猜你喜欢
  • 2013-02-01
  • 1970-01-01
  • 2018-07-31
  • 2014-10-21
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多