简体   繁体   English

Java:为什么我无法从另一个类的 jTextFields 中获取值?

[英]Java: Why I can't get value from jTextFields from another class?

I am try to build an application based on "MVC" in Java and I have 2 classes: 1: Functions and Actions 2: Buttons, Swing elements我尝试在 Java 中构建基于“MVC”的应用程序,并且我有 2 个类:1:函数和操作 2:按钮、Swing 元素

I want to access from 1 Class to 2 Class and do specific action.我想从 1 类访问到 2 类并执行特定操作。

AccionesUsuarios.java AccionesUsuarios.java

public class AccionesUsuarios{

private static BaseDatos conn;
private static iniciarSesionw dataLogin;

public void iniciarSesion(){
    dataLogin = new iniciarSesionw();
    String usr = "", pwd = "";
    usr = dataLogin.textLoginUser.getText().trim();
    pwd = dataLogin.textLoginPass.getText().trim();

    System.out.println("Usuario: "+usr);
    System.out.println("Contraseña: "+pwd);
    /*try {
        conn.openConnection();

        /*dataLogin = new iniciarSesionw();
        String username = dataLogin.textLoginUser.getText();
        String password = dataLogin.textLoginPass.getText();

        ComandoBaseDatos comando = new ComandoBaseDatos("SELECT * FROM Usuarios_Operadores WHERE Usuario = '123' AND Clave = '123'");
        ResultSet rs = comando.SQLExecute();

        while (rs.next()) {
            JOptionPane.showMessageDialog(null, "Correcto!");
        }
        conn.closeConnection();
    } catch (SQLException ex) {
        conn.getSqlMessage(ex);
    }*/     
}
}

iniciarSesionw.java iniciarSessionw.java

public class iniciarSesionw {

public JTextField textLoginUser;
public JTextField textLoginPass;
public JButton btnIngresar;

private static AccionesUsuarios au;

/*Launch the application */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                iniciarSesionw window = new iniciarSesionw();
                window.frmItcuautlaControl.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public iniciarSesionw() {
    initialize();
}

private void initialize() { 

            textLoginUser = new JTextField();
    textLoginUser.setBounds(185, 110, 153, 27);
    panel.add(textLoginUser);
    textLoginUser.setColumns(10);

    textLoginPass = new JTextField();
    textLoginPass.setColumns(10);
    textLoginPass.setBounds(185, 148, 153, 27);
    panel.add(textLoginPass);

            btnIngresar = new JButton("Ingresar");
    btnIngresar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            au = new AccionesUsuarios();
            au.iniciarSesion();

        }
    });
}

But when print value of textLoginUser and textLoginPass are empty.但是当textLoginUsertextLoginPass 的打印值为空时。

I hope I have explained and thanks in advance.我希望我已经解释并提前致谢。

Edit:编辑:

Solved with @looper answer !!@looper回答解决了!! But now.. uncomment the section in AccionesUsuarios.java that contains connection to database and display those errors:但是现在..取消注释 AccionesUsuarios.java 中包含数据库连接的部分并显示这些错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Controlador.AccionesUsuarios.iniciarSesion(AccionesUsuarios.java:43)
at Vista.iniciarSesionw$2.actionPerformed(iniciarSesionw.java:124)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
and more....

The textfields are never set.永远不会设置文本字段。 You should get the contents in an other way:您应该以其他方式获取内容:

btnIngresar = new JButton("Ingresar");
btnIngresar.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        au = new AccionesUsuarios();
        au.iniciarSesion(textLoginUser, textLoginPass);

    }
});

AccionesUsuarios.java AccionesUsuarios.java

public void iniciarSesion(String user, String pass){
    dataLogin = new iniciarSesionw();
    String usr = "", pwd = "";
    usr = user.trim();
    pwd = pass.trim();

    System.out.println("Usuario: "+usr);
    System.out.println("Contraseña: "+pwd);
/*try {
        conn.openConnection();

        /*dataLogin = new iniciarSesionw();
        String username = usr;
        String password = pwd;

        ComandoBaseDatos comando = new ComandoBaseDatos("SELECT * FROM Usuarios_Operadores WHERE Usuario = '123' AND Clave = '123'");
        ResultSet rs = comando.SQLExecute();

        while (rs.next()) {
            JOptionPane.showMessageDialog(null, "Correcto!");
        }
        conn.closeConnection();
    } catch (SQLException ex) {
        conn.getSqlMessage(ex);
    }*/     

As Capn Sparrow pointed out, you create a new instance of your iniciarSesionw-Class in your AccionesUsuarios.java which results in empty values ;).正如 Capn Sparrow 所指出的,您在 AccionesUsuarios.java 中创建了一个 iniciarSesionw-Class 的新实例,这会导致空值;)。

In AccionesUsuarios when you do this:在 AccionesUsuarios 中执行此操作时:

dataLogin = new iniciarSesionw();

you are creating a new instance of the iniciarSesionw class.您正在创建 iniciarSesionw 类的新实例。 Because it's a different instance, it won't have any of the values that were set in the other instance.因为它是一个不同的实例,所以它不会有在另一个实例中设置的任何值。

Instead, you could try passing a reference to your iniciarSesionw instance, like this:相反,您可以尝试传递对 iniciarSesionw 实例的引用,如下所示:

AccionesUsuarios.java AccionesUsuarios.java

public class AccionesUsuarios {

  private static BaseDatos conn;
  private iniciarSesionw dataLogin;  // note, I've removed the static keyword

  public AccionesUsuarios(iniciarSesionw dataLogin) {
    this.dataLogin = dataLogin;
  }

  ...

iniciarSesionw.java iniciarSessionw.java

    public void actionPerformed(ActionEvent arg0) {
        au = new AccionesUsuarios( this );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM