本文介绍的租房管理软件,是基于Java编写的主界面,采用访问数据库的方式,实现增加、删除、及保存信息等功能,因为是租房管理软件,所以点睛之笔是可以实现到期提醒功能。界面如下:
程序实现主要有三个子程序:
1. DBcon.java用于访问数据库,我用的是mysql,比sql server相对简单一点,不了解的同学自行搜索一下,网上教程很多。
2. 登录界面login.java,代码我也不贴了,网上也有好多教程。
3. 功能界面fangchan.java,我把代码贴出来给大家参考,在到期提醒功能中,我踩过坑,研究了好久,现在把成功的代码放上来。
package fangzhushou;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Vector;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JTextField;
import javax.swing.Timer;
import javax.swing.JLabel;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class fangchan extends JFrame{
DefaultTableModel tableModel; // 默认显示的表格
JButton add,del,exit,save,alarm; // 各处理按钮
JTable table; // 表格
JPanel panelUP,panelUP1; //增加信息的面板
JLabel rq;
JLabel tm;
// 构造函数
public fangchan(){
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
this.setSize(d);
this.setTitle("房助手"); // 设置窗体名称
this.setLayout(new BorderLayout()); // 设置窗体的布局方式
// 新建各按钮组件
add = new JButton("增加");
del = new JButton("删除");
save = new JButton("保存");
exit = new JButton("退出");
alarm= new JButton("到期提醒");
tm = new JLabel();
rq=new JLabel("日期:");
panelUP = new JPanel(); // 新建按钮组件面板
panelUP.setLayout(new FlowLayout(FlowLayout.LEFT)); // 设置面板的布局方式
panelUP1 = new JPanel(); // 新建按钮组件面板
panelUP1.setLayout(new FlowLayout(FlowLayout.RIGHT)); // 设置面板的布局方式
// 将各按钮组件依次添加到面板中
panelUP.add(add);
panelUP.add(del);
panelUP.add(save);
panelUP.add(exit);
panelUP.add(alarm);
panelUP1.add(rq);
panelUP1.add(tm);
//时间
Date Now=new Date();
SimpleDateFormat t = new SimpleDateFormat ("yyyy-MM-dd");//格式化时间,把时间格式化为年月日
tm.setText(t.format(Now));//给标签添加内容,即时间
// 取得haha数据库的aa表的各行数据
Vector rowData = DBcon.getRows();
// 取得haha数据库的aa表的表头数据
Vector columnNames = DBcon.getHead();
// 新建表格
tableModel = new DefaultTableModel(rowData,columnNames);
table = new JTable(tableModel);
JScrollPane s = new JScrollPane(table);
// 将面板和表格分别添加到窗体中
this.add(panelUP,BorderLayout.NORTH);
this.add(panelUP1,BorderLayout.SOUTH);
this.add(s);
// 事件处理
MyEvent();
this.setVisible(true); // 显示窗体
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体可关闭
this.setResizable(true); //设置大小可变
this.setBackground(Color.WHITE); //设置窗口背景
}
// 事件处理
public void MyEvent(){
// 增加
add.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// 增加一行空白区域
tableModel.addRow(new Vector());
}
});
// 删除
del.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
// 删除指定行
int rowcount = table.getSelectedRow();
if(rowcount >= 0){
tableModel.removeRow(rowcount);
}
}
});
/**
* 保存
* 我的解决办法是直接将aa表中的全部数据删除,
* 将表格中的所有内容获取到,
* 然后将表格数据重新写入aa表
*/
save.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
int column = table.getColumnCount(); // 表格列数
int row = table.getRowCount(); // 表格行数
// value数组存放表格中的所有数据
String[][] value1 = new String[row][column];
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
value1[i][j] = table.getValueAt(i, j).toString();
}
}
// 以下均为对数据库的操作
String sql_url = "jdbc:mysql://localhost:3306/haha"; //数据库路径(一般都是这样写),haha是数据库名称
String name = "root"; //用户名
String password = "123456"; //密码
Connection conn;
PreparedStatement preparedStatement = null;
try {
Class.forName("com.mysql.jdbc.Driver"); //连接驱动
conn = DriverManager.getConnection(sql_url, name, password); //连接数据库
if(!conn.isClosed())
System.out.println("成功连接数据库");
// 删除aa表中所有数据
preparedStatement = conn.prepareStatement("delete from aa where true");
preparedStatement.executeUpdate();
// 将value数组中的数据依次存放到aa表中
for(int i = 0; i < row; i++){
preparedStatement = conn.prepareStatement("insert into aa values(" + Integer.parseInt(value1[i][0]) + ",'" + value1[i][1] + "','" + value1[i][2] + "'," + Integer.parseInt(value1[i][3]) + ",'" + value1[i][4]+ "', '"+ value1[i][5] + "')");
preparedStatement.executeUpdate();
}
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
System.out.println("未成功加载驱动。");
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
System.out.println("未成功打开数据库。");
e1.printStackTrace();
}
}
});
// 退出
exit.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
//到期提醒
alarm.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
int column = table.getColumnCount(); // 表格列数
int row = table.getRowCount(); // 表格行数
// value数组存放表格中的所有数据
String[][] value2 = new String[row][column];
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
value2[i][j] = table.getValueAt(i, j).toString();
}
}
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
for(int i = 0; i < row; i++){
value2[i][5] = table.getValueAt(i, 5).toString();
try{
Date dt1=df.parse(value2[i][5]);
Date dt2=df.parse(tm.getText());
if(dt1.getTime()>dt2.getTime()){
JOptionPane.showMessageDialog(null, value2[i][1]+"已超期");
}else{
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
});
}
// 主函数
public static void main(String[] args){
new fangchan();
}
}
总结:
基于Java编写的主界面也可以做的很好看,当时只为了完成相关功能,没有在细节上把控。
如果各位需要完整代码,可以到主页下载。