【问题标题】:How can one test user input from a JPanel?如何测试来自 JPanel 的用户输入?
【发布时间】:2016-12-20 05:17:43
【问题描述】:

我正在尝试使用 SQL (mySQL workbench) 和 Java (Eclipse) 构建一个简单的登录数据库。我不确定如何针对 SQL 中的数据库测试字符串输入(JTextField 和 JPasswordField),甚至针对任何其他字符串。

如果登录凭据等于指定的字符串,我希望 Java 打印一条语句。这是我当前的代码:

import javax.swing.*;
import java.sql.*;


public class Hello1 extends JFrame {




private static final long serialVersionUID = 1487932324102279819L;


public static void main(String[] args) {

    JFrame frame = new JFrame("Frame Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(350,200);



    JPanel panel = new JPanel();
    frame.add(panel);
    placeComponents(panel);

    frame.setVisible(true);

    String username0 = "java";
    String password = "password";

    Statement stmt = null;
    try{
        String url = "jdbc:mysql://localhost:3306/javabase?useSSL=false";
        Connection connection = DriverManager.getConnection(url, username0, password);
        stmt = connection.createStatement();
        ResultSet rs;
        rs = stmt.executeQuery("SELECT * from userids ");
        while(rs.next()) {
            String user = rs.getString("username");
            String pass = rs.getString("paswrd");
            System.out.println(user);
            System.out.println(pass);
        }
        connection.close();

        }

        catch (Exception e) {
             System.err.println("Got an exception! ");
             System.err.println(e.getMessage());
        }
     }



private static void placeComponents(JPanel panel) {

    panel.setLayout(null);
    JLabel userLabel = new JLabel("Username");
    userLabel.setBounds(10,20,80,25);
    panel.add(userLabel);

    JTextField userText = new JTextField(20);
    userText.setBounds(100, 20, 165, 25);
    panel.add(userText);
    String user = userText.getText();       

    JLabel passwordLabel = new JLabel("Password");
    passwordLabel.setBounds(10,50,80,25);
    panel.add(passwordLabel);

    JPasswordField passwordText = new JPasswordField(20);
    passwordText.setBounds(100,50,165,25);
    panel.add(passwordText);
    String pass = passwordText.getSelectedText();

    if(user.equals('b') && pass.equals('t')){
        System.out.println("Correct Login");
    }
    System.out.println(pass);

    JButton loginB = new JButton("Login");
    loginB.setBounds(10, 80, 80, 25);
    panel.add(loginB);


}

}

我尝试使用 .getText() 和 .getSelectedText() 方法获取每个 userText/passwordText 中的文本。

【问题讨论】:

  • 你到底卡在哪里了?
  • @GhostCat 我被困在如何使用该按钮调用一个类,该类将根据 SQL 数据库中的用户名和密码检查用户名和密码。

标签: java mysql swing jframe jtextfield


【解决方案1】:

如果我理解正确,那么您需要在单击Login 按钮时获取密码。

请在初始化按钮后在placeComponents方法中添加以下代码。

loginB.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            char[] pass = passwordText.getPassword();
            System.out.println(pass);
        }
    });

动作侦听器可能是最容易实现的——也是最常见的——事件处理程序。您实现一个动作监听器来定义当用户执行某些操作时应该做什么。

您可以在 ActionListener here 上阅读更多内容。

您可以参考this example 了解如何使用密码字段。

【讨论】:

  • 非常感谢您迅速而有用的回复。我会测试一下。
【解决方案2】:

您应该在准备好的语句中将用户名和密码作为参数传递并执行它,然后检查是否有匹配使用:

public void login(String user,String pass){
    String url = "jdbc:mysql://localhost:3306/javabase?useSSL=false";
    Connection connection = DriverManager.getConnection(url, username0, password);
    PreparedStatement stmt = connection.prepareStatement("SELECT * from userids where username=? and password=? ");
    stmt.setString(1, user);
    stmt.setString(2, pass);
    ResultSet rs= stmt.executeQuery();

    if(rs.hasNext()){
    //continue with operation
    }else{
    //show user doesn't exist
    }
}

然后给按钮添加事件:

loginB.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
String user = userTextBox.getText().toString();
char[] pass = passwordText.getPassword();
            login(user,pass);
        }
    });

【讨论】:

  • 为什么我们必须使用“String”作为用户名和“char[]”作为密码?是因为我们使用了密码字段吗?感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 2019-10-13
  • 2015-11-10
  • 2016-01-20
相关资源
最近更新 更多