//有菜单栏选项 文件中有保存和打开功能 点击保存会自动将用户信息导入数据库中,并在控制台输出保存的路径。
//菜单栏文件中有打开功能,可以打开用户的信息,并输出在控制台上
//Register.class 注册窗口的实现
import java.awt.*;
import java.awt.event.ActionEvent;
import java.io.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.*;
public class Register extends JFrame{
public static void main(String[] args) {
Register jfd = new Register();
}
public Register(){
super("注册页面实现功能!");
//菜单栏
JMenuBar jmb=new JMenuBar();
this.setJMenuBar(jmb);
//菜单
JMenu jmFile = new JMenu("文件");
JMenu jmEdit = new JMenu("编辑");
JMenu jmHelp = new JMenu("帮助");
JMenu jmNewCreate = new JMenu("新建");
jmb.add(jmFile);
jmb.add(jmEdit);
jmb.add(jmHelp);
//菜单项
JMenuItem jmiOpen = new JMenuItem("打开");
JMenuItem jmiSave = new JMenuItem("保存");
JMenuItem jmiExit = new JMenuItem("退出");
JMenuItem jmiCopy = new JMenuItem("复制");
JMenuItem jmiPaste = new JMenuItem("粘贴");
JMenuItem jmiAbout = new JMenuItem("关于");
JMenuItem jmiClass = new JMenuItem("java类");
JMenuItem jmiPro = new JMenuItem("java项目");
JMenuItem jmiOther = new JMenuItem("其他");
//菜单添加菜单项
jmNewCreate.add(jmiClass);
jmNewCreate.add(jmiPro);
jmNewCreate.add(jmiOther);
jmFile.add(jmNewCreate);
jmFile.add(jmiOpen);
jmFile.add(jmiSave);
jmFile.add(jmiExit);
jmEdit.add(jmiCopy);
jmEdit.add(jmiPaste);
jmHelp.add(jmiAbout);
JPanel jp ;
jp = new JPanel(new GridLayout(7,1));
JLabel jl1 = new JLabel("注册页面", new ImageIcon("images/logo.png"),SwingConstants.CENTER);
JPanel p = new JPanel();
p.add(jl1);
jp.add(p);
JLabel jl2 = new JLabel("用户名:");
JTextField jtf = new JTextField(30);
JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEADING));
p1.add(jl2);
p1.add(jtf);
jp.add(p1);
JLabel jl3 = new JLabel("密 码:");
JPasswordField jpf = new JPasswordField(30);
JPanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
p2.add(jl3);
p2.add(jpf);
jp.add(p2);
JLabel jl4 = new JLabel("性 别:");
JRadioButton rbmale = new JRadioButton("男");
JRadioButton rbfemale= new JRadioButton("女");
ButtonGroup sex = new ButtonGroup();
sex.add(rbmale);
sex.add(rbfemale);
JPanel p3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
p3.add(jl4);
p3.add(rbmale);
p3.add(rbfemale);
jp.add(p3);
JLabel jl5 = new JLabel("省 份:");
JComboBox<String> cmbCity = new JComboBox<String>();
cmbCity.addItem("北京");
cmbCity.addItem("上海");
cmbCity.addItem("广州");
cmbCity.addItem("深圳");
cmbCity.addItem("郑州");
JPanel p4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
p4.add(jl5);
p4.add(cmbCity);
jp.add(p4);
JLabel jl6 = new JLabel("爱 好:");
JCheckBox ckRead = new JCheckBox("阅读");
JCheckBox ckNet = new JCheckBox("上网");
JCheckBox ckSwim = new JCheckBox("游泳");
JCheckBox ckTour = new JCheckBox("旅游");
JPanel p5 = new JPanel(new FlowLayout(FlowLayout.LEFT));
p5.add(jl6);
p5.add(ckRead);
p5.add(ckNet);
p5.add(ckSwim);
p5.add(ckTour);
jp.add(p5);
JButton jb1 = new JButton("确认");
JButton jb2 = new JButton("取消");
JPanel p6 = new JPanel(new FlowLayout(FlowLayout.CENTER));
p6.add(jb1);
p6.add(jb2);
jp.add(p6);
jb1.addActionListener(e-> System.out.println("注册成功"));
jb2.addActionListener(e-> {System.out.println("退出成功! ");System.exit(0);});
jl2.setBounds(120,30,165,25);
this.add(jp);
this.setLocation(500,300);
//为退出功能添加事件监听器
jmiExit.addActionListener( e -> System.exit(0)); //Lambda表达式的优化(参数一个可省略(),一行代码可省略{};System.exit(0)虚拟机强制结束
//为打开功能添加事件监听器
jmiOpen.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jfc = new JFileChooser();
int rVal = jfc.showOpenDialog(jmb);
if(rVal==JFileChooser.APPROVE_OPTION){
//获取文件对话框中用户选中的文件名
String fileName = jfc.getSelectedFile().getName();
//获取文件对话框中用户选中的文件所在路径
String path = jfc.getCurrentDirectory().toString();
StringBuilder sb = new StringBuilder();
try {
//输入流 读取指定文件数据
FileReader fr = new FileReader(path + "/" + fileName);
//创建缓冲流 不仅效率高 而且缓冲流中有读取一行的方法 !!!非常方便
BufferedReader br = new BufferedReader(fr);
//读取一行
String line = br.readLine();
//遍历文件信息
while(line!=null){
sb.append(line+"\n");
line=br.readLine();
}
System.out.println("文件中的信息:"+sb);
br.close();
fr.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
//为保存功能添加事件监听器 保存后通过jdbc插入到数据库mysql中
jmiSave.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jfc=new JFileChooser();
int rVal = jfc.showSaveDialog(jmb);
StringBuilder sb = new StringBuilder();
String id = jl2.getText();
sb.append(jtf.getText());
String pas = jl3.getText();
//getPassword()返回的是char[] 可以使用过时的getText()
sb.append("-" + String.copyValueOf(jpf.getPassword()));
if (rbmale.isSelected()) {
sb.append("-" + "男");
} else {
sb.append("-" + "女");
}
sb.append("-"+cmbCity.getSelectedItem());
sb.append("-");
if (ckRead.isSelected()) {
sb.append(ckRead.getText());
}
if (ckNet.isSelected()) {
sb.append(ckNet.getText());
}
if (ckSwim.isSelected()) {
sb.append(ckSwim.getText());
}
System.out.println(sb);
if(rVal==JFileChooser.APPROVE_OPTION){
//获取文件对话框中用户选中的文件名
String fileName = jfc.getSelectedFile().getName();
//获取文件对话框中用户选中的文件所在路径
String path = jfc.getCurrentDirectory().toString();
System.out.println("成功写入文档中! 文档的路径在:"+path + "/" + fileName);
try {
//文件输出流 将保存的信息写入到文件中 文件路径就是上面获取到的:path + "/" + fileName
FileWriter fw = new FileWriter(path + "/" + fileName);
//将用户信息写入到文件中
fw.write(sb.toString());
fw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
//将保存的信息写入到数据库中
try {
Connection conn = DBUtils.getConn();
//创建发送器
//创建一个SQL命令发送器Statement
PreparedStatement pstmt = conn.prepareStatement("insert into userXinxi values(?,?,?,?,?)");
//将信息写入到数据库中
String str = sb.toString();
String[] split = str.split("-");
for(int i=1;i<split.length+1;i++){
pstmt.setString(i,split[i-1]);
}
int i = pstmt.executeUpdate();
System.out.println("成功往数据库中插入"+i+"条信息");
conn.close();
pstmt.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
});
//为确认增加模式对话框
JDialog jDialog = new JDialog(this);
//设置对话框合适大小
jDialog.pack();
jb1.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JLabel qr=new JLabel("注册成功");
jDialog.add(qr);
//窗口位置
jDialog.setLocation(850,450);
//窗口大小
jDialog.setSize(150,150);
jDialog.setVisible(true);
}
});
//this.setSize(400,300);
//调整合适大小
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//封装连接数据库的工具类 DBUtils.class
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DBUtils {
public static String driverClassName,url,user,password;
static Connection conn=null;
static {
//获取类加载器 -->反射
ClassLoader cl = DBUtils.class.getClassLoader();
//读取db.properties文件
InputStream is=cl.getResourceAsStream("com/heima/优化jdbc/db.properties.properties");
//Properties流操作 键值对 key value
Properties pros = new Properties();
try {
pros.load(is);
driverClassName = pros.getProperty("driverClassName");
url = pros.getProperty("url");
user = pros.getProperty("user");
password = pros.getProperty("password");
//加载驱动
Class.forName(driverClassName);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConn() throws SQLException {
conn = DriverManager.getConnection(url, user, password);
System.out.println("连接成功!");
return conn;
}
}
//配置文件db.properties.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useSSL=false
user=root
password=123456
//数据库test下userxinxi表中的字段