我的GUI有2个JTextFields- EmailLoginField
和jPasswordField1
。我只是讨论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到无法找到符号数小时的所有内容!想想我已经尝试了这么久,以至于我可以从一些新鲜的眼睛中受益!
非常感谢帮助。
答案 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;
}
}