如何从JTextField获取文本,转换为字符串,并在不同的java公共类中使用此字符串

时间:2015-11-12 07:22:42

标签: java swing user-interface jtextfield

我的GUI有2个JTextFields- EmailLoginFieldjPasswordField1。我只是讨论EmailLoginField并且只是复制jPasswordField1上建议的内容。

所以有一些GUI代码:

package p;
imports ...

public class EmailLoginGUI extends javax.swing.JFrame {

    public EmailLoginGUI() {
        initComponents();
    }

    private void initComponents() {
        ...
        EmailLoginField = new javax.swing.JTextField();
    }

    ...

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    EmailMainGUI open = new EmailMainGUI();
    open.setVisible(true);

下一段代码片段是我尝试从JTextField EmailLoginField

中的EmailLoginGUI.java获取文字的内容
public String getEmailLoginField(){
    return EmailLoginField.getText();

}

public String getjPasswordField(){
    return jPasswordField1.getText();
}

这是下一部分(不假设上面的代码是正确的)。下一个代码是一个完全不同的公共类,当然也是相同的包。以下是我尝试过的应该查看EmailLoginGUI类并获取JTextField内容,最终将其存储为String

请注意:包含JTextField内容的最终字符串不得在SendEmail(EmailLoginGUI c1, EmailLoginGUI c2){内。它们应该只在public class SendEmail {内部,以便以后可以被其他代码使用。

package p;
imports ...
public class SendEmail {


JTextField userTF;
    JPasswordField passPF;

        SendEmail(EmailLoginGUI c1, EmailLoginGUI c2){
        userTF.setText(c1.getEmailLoginField());
        passPF.setText(c2.getjPasswordField());

    }


    public String user(){
        return userTF.getText();
    }

    public String pass() {
        return passPF.getText();
    }

    ...

    SendEmail(...) {

    Properties props = new Properties();

            ...

    Session session = Session.getInstance(props, new javax.mail.Authenticator()
    {

        protected javax.mail.PasswordAuthentication getPasswordAuthentication()
        {
            return new javax.mail.PasswordAuthentication(user(), pass()); //This is where the final strings need to go.
        }
});

希望我想要做的是明确的: 从EmailLoginGUI.java中创建的JTextField获取内容。将其转换为SendEmail.java。它的最终类型应该是String,而且只是在内部' public class SendEmail的。{我已经拥有从NullPointerException到无法找到符号数小时的所有内容!想想我已经尝试了这么久,以至于我可以从一些新鲜的眼睛中受益! 非常感谢帮助。

2 个答案:

答案 0 :(得分:0)

在SendEmail类中,创建具有用户输入参数

的构造函数
SendEmail(String userInput) {
  //Your Code
}

在EmailLoginGUI中创建

String userInput = EmailLoginField.getText().toString(); 
SendEmail sendemail = new SendEmail(userInput);

这个方法有效我用过它。希望能帮助到你。

答案 1 :(得分:0)

  

我意识到安全风险以及对话如何变得更容易,但我没有时间回去改变它。我已经编写了监听器,所以这不是问题。但是,这就是我想要做的!我哪里错了?

然后你需要实现某种Observer Pattern

首先定义登录视图可能生成的预期操作,例如,期望用户可以接受或取消视图是合理的

public interface EmailLoginListener {
    public void emailLoginWasAccepted(EmailLoginGUI gui);
    public void emailLoginWasCanceled(EmailLoginGUI gui);
}

更新视图以提供对侦听器的支持

public class EmailLoginGUI extends javax.swing.JFrame {

    private List<EmailLoginListener> listeners;

    public EmailLoginGUI() {
        initComponents();
        listeners = new ArrayList<>(25);
    }

    //...

    public void addEmailLoginListener(EmailLoginListener listener) {
        listeners.add(listener);
    }

    public void removeEmailLoginListener(EmailLoginListener listener) {
        listeners.add(listener);
    }

    protected void fireLoginWasAccepted() {
        for (EmailLoginListener listener : listeners) {
            listener.emailLoginWasAccepted(this);
        }
    }

    protected void fireLoginWasCanceled() {
        for (EmailLoginListener listener : listeners) {
            listener.emailLoginWasCanceled(this);
        }
    }
}

EmailLoginGUI视图中按钮的操作处理程序中,触发所需的事件...

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    fireLoginWasAccepted();
}

请记住,如果你有取消操作,你也应该这样做。

现在,当您创建EmailLoginGUI的实例时,请务必同时注册EmailLoginListener

EmailLoginGUI loginView = new EmailLoginGUI();
loginView.addEmailLoginListener(new EmailLoginListener() {
    @Override
    public void emailLoginWasAccepted(EmailLoginGUI gui) {
        gui.dispose();
        String email = gui.getEmailLoginField();
        String password = gui.getjPasswordField();

        EmailMainGUI open = new EmailMainGUI();
        open.setCredentials(email, password);
        //...
        open.setVisible(true);
    }

    @Override
    public void emailLoginWasCanceled(EmailLoginGUI gui) {
        // Exit the program?
        gui.dispose();
    }
});
//...
loginView.setVisible(true);

这将要求您更改EmailMainGUI的构造函数以接受电子邮件和密码或将该信息传递给类的方法(如上所述)

最后更改SendEmail以接受String值,而不是您的gui组件

public class SendEmail {

    String email;
    String password;

    SendEmail(String email, String password) {
        this.email = email;
        this.password = password;
    }

    public String user() {
        return email;
    }

    public String pass() {
        return password;
    }
}