展开全部
package com.accp;
import java.awt.Font;
import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
public class MyFrame extends JFrame {
private JTable tbl_TotalMoney;
private JScrollPane scp_TotalMoney;
private JLabel label_1;
private JTable tbl_Money;
private JScrollPane scp_Money;
private JLabel label;
double total = 0;
int food = 0;
int ryp = 0;
int fuzhuang = 0;
int jiaotong = 0;
int tel = 0;
int jiaoji = 0;
int water = 0;
int dianfei = 0;
int meiqi = 0;
int fangfei = 0;
/**
*
*/
private static final long serialVersionUID = 2137990312542359877L;
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
MyFrame frame = new MyFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame
*/
public MyFrame() {
super();
setBounds(100, 100, 715, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponents();
//
}
private void initComponents() {
getContentPane().setLayout(null);
setTitle("家庭收支统计表");
label = new JLabel();
label.setFont(new Font("宋体", Font.BOLD, 16));
label.setText("家庭收支情况");
label.setBounds(175, 10, 110, 15);
getContentPane().add(label);
scp_Money = new JScrollPane();
scp_Money.setBounds(10, 31, 687, 170);
getContentPane().add(scp_Money);
//创建表头32313133353236313431303231363533e4b893e5b19e31333236383530信息
String colName[] = { "日期", "食品费", "日用品费", "服装费", "交通费", "电话", "交际费",
"水费", "电费", "煤气费", "房费" };
Calendar cal = Calendar.getInstance();
// 获得当前的年份
int year = cal.get(Calendar.YEAR);
// 获得当前的月份
int month = cal.get(Calendar.MONTH) + 1;
// 获得当前月份的天数\
int days = cal.getMaximum(Calendar.DAY_OF_MONTH);
// 初始化二维数组, 用于行信息的显示(创建行数据),行数为每月天数,列数位11列,与表头对应
Object rowsData[][] = new Object[days][11];
for (int i = 0; i < days; i++) {
rowsData[i][0] = year + "-" + month + "-" + (i + 1);
}
//使用构造函数JTable(Object[][] rowData, Object[] columnNames)构建表格
tbl_Money = new JTable(rowsData, colName);
scp_Money.setViewportView(tbl_Money);
//上述是家庭收支情况表的结构
label_1 = new JLabel();
label_1.setFont(new Font("宋体", Font.PLAIN, 14));
label_1.setText("费用统计");
label_1.setBounds(10, 221, 60, 15);
getContentPane().add(label_1);
scp_TotalMoney = new JScrollPane();
scp_TotalMoney.setBounds(10, 242, 687, 89);
getContentPane().add(scp_TotalMoney);
// 定义显示所有列的信息
String colName2[] = { " ", "合计", "食品费", "日用品费", "服装费", "交通费", "电话",
"交际费", "水费", "电费", "煤气费", "房费" };
// 初始化二维数组, 显示所有的行的信息
Object rowsData2[][] = new Object[2][12];
rowsData2[0][0] = "金额";
rowsData2[1][0] = "比例";
tbl_TotalMoney = new JTable(rowsData2, colName2);
scp_TotalMoney.setViewportView(tbl_TotalMoney);
//注册事件监听器
tbl_Money.getModel().addTableModelListener(new TableModelListener(){
public void tableChanged(TableModelEvent e) {
// 存放用户输入的字符串形式的数字、
String inputStr = "";
// 存放转换后的整形的数字
int inputInt = 0;
// 获得当前的表格的数据模型
try {
TableModel model = (TableModel) e.getSource();
inputStr = model.getValueAt(e.getFirstRow(), e.getColumn())
.toString();
// JOptionPane.showMessageDialog(null, inputStr);
inputInt = Integer.parseInt(inputStr);
// 判断用户是在哪一列输入的
switch (e.getColumn()) {
case 1:
food = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney.setValueAt(String.valueOf(food), 0, 2);
break;
case 2:
ryp = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney.setValueAt(String.valueOf(ryp), 0, 3);
break;
case 3:
fuzhuang = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney
.setValueAt(String.valueOf(fuzhuang), 0, 4);
break;
case 4:
jiaotong = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney
.setValueAt(String.valueOf(jiaotong), 0, 5);
break;
case 5:
tel = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney.setValueAt(String.valueOf(tel), 0, 6);
break;
case 6:
jiaoji = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney.setValueAt(String.valueOf(jiaoji), 0, 7);
break;
case 7:
water = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney.setValueAt(String.valueOf(water), 0, 8);
break;
case 8:
dianfei = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney.setValueAt(String.valueOf(dianfei), 0, 9);
break;
case 9:
meiqi = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney.setValueAt(String.valueOf(meiqi), 0, 10);
break;
case 10:
fangfei = getColumnValues(tbl_Money.getRowCount(), e
.getColumn());
tbl_TotalMoney
.setValueAt(String.valueOf(fangfei), 0, 11);
break;
}
// 计算总费用
total = food + ryp + fuzhuang + jiaotong + tel + jiaoji
+ water + dianfei + meiqi + fangfei;
// 设置合计金额
tbl_TotalMoney.setValueAt(String.valueOf(total), 0, 1);
// 设计比例
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((food / total) * 100))
+ "%", 1, 2);
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((ryp / total) * 100))
+ "%", 1, 3);
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((fuzhuang / total) * 100))
+ "%", 1, 4);
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((jiaotong / total) * 100))
+ "%", 1, 5);
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((tel / total) * 100))
+ "%", 1, 6);
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((jiaoji / total) * 100))
+ "%", 1, 7);
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((water / total) * 100))
+ "%", 1, 8);
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((dianfei / total) * 100))
+ "%", 1, 9);
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((meiqi / total) * 100))
+ "%", 1, 10);
tbl_TotalMoney.setValueAt(String.valueOf(Math
.round((fangfei / total) * 100))
+ "%", 1, 11);
} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(null, "请您输入数字!!");
}
}
});
}//以上是件监听器所要做的事情
//获得每一列中的所有值得和
private int getColumnValues(int totalRow, int colIndex) {
int values = 0;
for (int i = 0; i < totalRow; i++) { // i 0
if (null == tbl_Money.getValueAt(i, colIndex))
continue;
values += Integer.parseInt(tbl_Money.getValueAt(i, colIndex)
.toString());
}
return values;
}
}
已赞过
已踩过<
你对这个回答的评价是?
评论
收起