高级事件处理实例

1.设计一个通过捕获文本框的键盘事件实现只允许输入数字的文本框。

import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Answer_2508 extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private JTextField textField_1;

	private JTextField textField;

	/**
	 * Launch the application
	 * 
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			Answer_2508 frame = new Answer_2508();
			frame.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the frame
	 */
	public Answer_2508() {
		super();
		setTitle("25-8");
		setBounds(100, 100, 500, 375);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		final JPanel panel = new JPanel();
		getContentPane().add(panel, BorderLayout.NORTH);

		final JLabel label = new JLabel();
		label.setText("方式一:");
		panel.add(label);

		textField = new JTextField();
		textField.addKeyListener(new KeyListener() {

			int keyCode;

			public void keyPressed(KeyEvent e) {
				keyCode = e.getKeyCode();
			}

			public void keyTyped(KeyEvent e) {
				if (keyCode < KeyEvent.VK_0 || keyCode > KeyEvent.VK_9)
					e.consume();
			}

			public void keyReleased(KeyEvent e) {
			}

		});
		textField.setColumns(20);
		panel.add(textField);

		final JPanel panel_1 = new JPanel();
		getContentPane().add(panel_1, BorderLayout.CENTER);

		final JLabel label_1 = new JLabel();
		label_1.setText("方式二:");
		panel_1.add(label_1);

		textField_1 = new JTextField();
		textField_1.addKeyListener(new KeyAdapter() {

			String num = "0123456789";

			public void keyTyped(KeyEvent e) {
				if (num.indexOf(e.getKeyChar()) < 0)
					e.consume();
			}

		});
		textField_1.setColumns(20);
		panel_1.add(textField_1);
		//
	}
}

在这里插入图片描述
2.设计一个通过捕获表格模型事件实现自动计算表格某一数值列的和。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

public class Answer_2509 extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private JTextField textField;

	private DefaultTableModel tableModel;

	private JTable table;

	private JLabel label;

	public static void main(String args[]) {
		try {
			Answer_2509 frame = new Answer_2509();
			frame.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Answer_2509() {
		super();
		setTitle("25-9");
		setBounds(100, 100, 500, 375);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		final JPanel panel = new JPanel();
		getContentPane().add(panel, BorderLayout.NORTH);

		final JLabel label_1 = new JLabel();
		label_1.setText("数量:");
		panel.add(label_1);

		textField = new JTextField();
		textField.setColumns(10);
		textField.setEditable(false);
		textField.setText((int) (Math.random() * 1000) + "");
		panel.add(textField);

		final JButton button = new JButton();
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object[] rowValues = { table.getRowCount() + 1,
						Integer.valueOf(textField.getText()) };
				tableModel.addRow(rowValues);
				textField.setText((int) (Math.random() * 1000) + "");
			}
		});
		button.setText("插入");
		panel.add(button);

		final JScrollPane scrollPane = new JScrollPane();
		getContentPane().add(scrollPane, BorderLayout.CENTER);

		String[] columnNames = { "编号", "数量" };

		tableModel = new DefaultTableModel(null, columnNames);
		tableModel.addTableModelListener(new TableModelListener() {
			public void tableChanged(TableModelEvent e) {
				int sum = 0;
				for (int i = 0; i < table.getRowCount(); i++) {
					sum += (Integer) tableModel.getValueAt(i, 1);
				}
				label.setText("数量总计:" + sum);
			}
		});

		table = new JTable(tableModel);
		scrollPane.setViewportView(table);

		label = new JLabel();
		label.setText("数量总计:0");
		getContentPane().add(label, BorderLayout.SOUTH);
		//
	}

}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值