从JFrame获取字符串值到Java类

时间:2013-08-28 23:09:24

标签: java mysql string swing jframe

您好我正在尝试构建一个允许我在MySQL数据库中存储电子邮件地址的小应用程序。我所做的是我已经创建了一个Java类文件( ec.java )和一个工作正常的连接以及用于将其执行到数据库中的代码。

在JFrame( ecframe.java )中,我创建了一个文本字段和一个按钮。输入电子邮件地址并按下按钮时,它会将此信息存储到名为textFieldValue的字符串中。但我无法弄清楚的是如何将这个字符串放入我的ec.java文件中。

这是我的代码 ec.java:

package emailcollector;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;


public class ec {

    public static void main(String[] args) {
        try{
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost", "admin", "pass");

            Statement stmt = (Statement) con.createStatement();

            String email = textFieldValue;

            String insert = "INSERT INTO emails VALUES ('" + email + ")";

            stmt.executeUpdate(insert);
        }catch(Exception e) {
    }
    }
}

这是我在 ecframe.java 中的代码:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        String textFieldValue = jTextField1.getText();

        JOptionPane.showMessageDialog(this, "Added: \nEmail: " + textFieldValue);
    } 

这是因为“私人”。这对我来说很困惑。提前谢谢!

3 个答案:

答案 0 :(得分:0)

在ec.java中创建con静态变量,然后在ecframe上按钮动作事件调用mysql语句,并通过调用静态连接变量创建语句

package emailcollector;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;


public class ec {

    public static Connection con;
    public static void main(String[] args) {
        try{
            con = DriverManager.getConnection("jdbc:mysql://localhost", "admin", "pass");


        }catch(Exception e) {
    }
    }
}

ecframe.java

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            String textFieldValue = jTextField1.getText();

        Statement stmt = (Statement) ec.con.createStatement();

            String email = textFieldValue;

            String insert = "INSERT INTO emails VALUES ('" + email + ")";

            stmt.executeUpdate(insert);
    } 

答案 1 :(得分:0)

而不是让事物变得静止,我经常喜欢使我的组件彼此独立。特别是,我喜欢JFileChooser和JColorChooser的工作方式,因此我喜欢使用模态JDialog或JOptionPane来模拟它们的功能。

例如,这是一个简单的面板,代表一个接收电子邮件的表单:

class EmailForm extends JPanel {
    private JTextField emailField = new JTextField(20);

    public EmailForm() {
        add(new JLabel("Email"));
        add(emailField);
    }

    public String getEmail() {
        return emailField.getText();
    }
}

在您的主要方法中,您只需说:

EmailForm form = new EmailForm();
int option = JOptionPane.showConfirmDialog(null, form, "Email", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
    System.out.println(form.getEmail());
}

现在,如果你的情况下表单不能独立,并且持有该数据库连接的类表示一个上下文,没有它,UI无法正常运行,那么你可能偶尔会将这样的依赖项传递给主窗体的构造函数。除此之外,您可以像其他人所建议的那样摆弄动作,事件监听器甚至工厂模式。

答案 2 :(得分:0)

有很多方法可以达到这个目的,这只是一个(这是一个可能的Factory模式的基本示例的开始)

您需要提供某种方式,以便ec类可以公开其功能......

更像是......

public class EmailManager {

    private Connection con;

    protected Connection getConnection() {
        if (connection == null) {
            con = DriverManager.getConnection("jdbc:mysql://localhost", "admin", "pass");
        }
        return con;
    }

    public void close() throws SQLException {
        if (con != null) {
            con.close();
        }
        con = null;
    }

    public void insertEmail(String email) throws SQLException {
        Statement stmt = null;
        try {
            Statement stmt = getConnection().createStatement();
            int count = stmt.execute("insert into emails values ('" + email + "')");
            if (count != 1) {
                throw new SQLException("Failed to insert new email");
            }
        } finally {
            try {
                stmt.close();
            } catch (Exception exp) {
            }
        }
    }
}

然后在您的UI类中,您可以简单地创建ec的实例并根据需要访问它的方法......

private EmailManager manager;

/*...*/

protected EmailManager getEMailManager() {
    if (manager == null) {
        manager = new EmailManager();
    }
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String textFieldValue = jTextField1.getText();
    try {
        getEMailManager().insertEmail(textFieldValue);
    } catch (SQLException exp) {
        JOptionPane.showMessageDialog(this, "Failed to insert email into database", "Error", JOptionPane.ERROR_MESSAGE);
        exp.printStackTrace();
    }
} 

没有冒犯,但所有这些都是基本的OO编程。您可能希望阅读Classes and Objects以了解更多详情和想法

您可能还想看看Code Conventions for the Java Programming Language