java添加键盘监听

您所在的位置:网站首页 java监听键盘输入并控制 java添加键盘监听

java添加键盘监听

#java添加键盘监听| 来源: 网络整理| 查看: 265

展开全部

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;

}

}

2Q==

已赞过

已踩过



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3