2 xzxmustwin xzxmustwin 于 2016.12.31 20:01 提问

java如何调用其他类中的变量 2C

初学者,最近在学着用窗体做一个个人记账本。其中我已经写好了load部分和register部分,连上数据库也都可以实现。然后在编写Accountbook这个类的时候我要知道我现在是哪个用户在登录并查询这个用户的记录。但是这个用户变量在load类中。怎么调用?
以下为部分源码:
load类:
import java.awt.*;

import javax.swing.*;

import java.sql.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Login extends JFrame implements ActionListener {
Connection conn;
Statement stat;
PreparedStatement ps;
ResultSet rs;
JButton load,reg;
JLabel userJLabel,passJLabel;
JPanel userJPanel, passJPanel,loadJPanel;
JTextField userJtf;
JPasswordField passJtf;
String user,pwd;

public static void main(String[] args) {
    Login login = new Login();
}

public Login(){
    super("登录");
    this.setSize(400,300);
    this.setLocation(300,200);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLayout(new GridLayout(4, 0));

    userJLabel = new JLabel("用户名:");
    userJtf = new JTextField(10);
    userJPanel = new JPanel();
    userJPanel.add(userJLabel);
    userJPanel.add(userJtf);
    this.getContentPane().add(userJPanel);

    passJLabel = new JLabel("密 码:");
    passJtf = new JPasswordField(10);
    passJPanel = new JPanel();
    passJPanel.add(passJLabel);
    passJPanel.add(passJtf);
    this.getContentPane().add(passJPanel);

    loadJPanel = new JPanel();
    load = new JButton("登录");
    load.addActionListener(this);
    loadJPanel.add(load);
    reg = new JButton("注册");
    reg.addActionListener(this);
    loadJPanel.add(reg);
    this.getContentPane().add(loadJPanel);

    this.setVisible(true);
    this.connection();
}

public void connection(){
    try {
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/db_user";
        conn = DriverManager.getConnection(url,"root","root");
        stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this,"连接数据库错误!","错误对话框",JOptionPane.ERROR_MESSAGE);
    }
}

public void actionPerformed(ActionEvent e) {
    if(e.getSource() == load){
    try {
        ps=conn.prepareStatement("select * from tb_user where user=? and pwd=? ");
        ps.setString(1, userJtf.getText());
        ps.setString(2, new String(passJtf.getPassword()));

        rs = ps.executeQuery();

        if(rs.next())
        {
            user = rs.getString(1);
            pwd = rs.getString(2);
            JOptionPane.showMessageDialog(null, "登录成功!!!", "提示消息", JOptionPane.WARNING_MESSAGE);
            System.out.println("成功获取到密码和用户名from数据库");
            System.out.println(user + "\t" + pwd + "\t");
        }else
        {
            JOptionPane.showMessageDialog(null, "用户名或者密码错误,请重新输入!", "提示消息", JOptionPane.ERROR_MESSAGE);

        }           
    } catch (Exception ex) {}
    }
    if(e.getSource() == reg){
        Register register = new Register();
    }
}
}
Accountbook类中:
rs=stat.executeQuery("select * from tb_accountbook where user = '"+user+"'");
这个user怎么获取

4个回答

sinat_37181010
sinat_37181010   2016.12.31 21:39

你可以关注下 ITIL先锋这个微信公众号 上面每天会更新IT行业最前沿资讯和各种类别的IT资料,感觉工作学习都比较有用

guwei4037
guwei4037   Ds   Rxr 2016.12.31 21:15

封装方法,把user作为一个对象(界面获取值)传给这个方法即可。

ljheee
ljheee   Rxr 2017.01.01 11:22

传递参数——构造Accountbook这个类的时候,加上参数。
或者直接把load类中user当前用户,写成public static,然后在Accountbook这个类需要的时候,通过load.user获得。

ZTZY520
ZTZY520   2017.01.02 11:31

把user单独写成一个类,然后改一下load类,让他的对象在初始化的时候传入一个user对象,也就是传一个user对象去登陆,这样做什么都方便了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!