java添加键盘监听 |
您所在的位置:网站首页 › java监听键盘输入并控制 › java添加键盘监听 |
展开全部 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; } } 已赞过 已踩过 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |