
正文
java按钮事件源代码 java实现简单按钮事件监听
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java的事件源、事件、侦听器
先解释一下原理性的东西,其实什么事件源、事件、侦听器,听起来相当的玄乎,在Java中一切皆为对象,所以它们也就是3类对象。
举个例子,你创建了一个按钮对象,它可以产生点击事件并将事件对象传递出去,因此它就是一个事件源。你希望在按钮被点击的时候执行一些特定的操作(弹个对话框什么的),那么你就需要把要做的事情提前告诉按钮对象,方式就是通过创建一个侦听器对象并把它加入到按钮点击事件的侦听序列里。
现在讲讲代码怎么写,就点击按钮这个例子来说,你只要创建一个类实现ActionListener接口即可,大部分的工作已经被封装在按钮对象的创建过程中了。
我再多罗嗦2句,事件这个概念相当有用,JMS,SOA,ESB这些当前企业应用开发中的核心技术都与它都有密切的关系,它是从设计的角度来看待已知问题,使问题的各参与者达到更加低的耦合度,Java领域已经出现了基于事件驱动设计(EDD)的框架,它将业务逻辑及业务处理器完全分离开来(不同于Spring这样的Ioc容器还存在接口依赖),通过引入线程实现了异步处理,极大地提高了系统的吞吐量,它是对传统的观察者模式的一种发展和延伸。
相关问答
Q1: java中什么是事件源,事件的处理过程是什么
在java的图形界面开发中,要让图形界面接收到用户的操作,就要给各个组件添加事件处理机制。
事件 : 为了实现用户对图形界面组件的操作,定义了一些事件
鼠标事件:单击,双击,滚轮等....
键盘事件 按下键盘,松开按键等...
焦点事件 :焦点获得 ,焦点失去...
窗口事件: 窗口打开,窗口关闭等....
事件源: 发声事件的场所. 比如按钮被点击,那么事件源就是按钮
文本框获得焦点. 那么事件源就是文本框
窗口被关闭,那么事件源就是窗口
事件源-----产生-----事件------被事件监听器发现------进入事件处理代码
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class DemoAction extends Frame {//窗口就是事件源
public DemoAction() {
this.setTitle("窗口关闭");
this.setLocation(400, 200);
this.setSize(360, 280);
//给窗口绑定一个事件监听器
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {//事件WindowEvent
System.exit(0);//关闭窗口事件, 那么退出jvm
}
});
this.setVisible(true);
}
public static void main(String[] args) {
new DemoAction();
}
}
Q2: Java给按钮添加事件
赞一个, 提前学习, 做好预先 , 是个好习惯.
java图形界面主要有AWT, SWING, SWT, JavaFx等技术
JButton (按钮)是SWING里面很常用的组件. 直接添加按钮到窗口,并不会产生任何交互效果.
要想产生交互效果,就需要了解awt,swing的事件处理机制:
事件:用户对组件的一个操作,称之为一个事件;
事件源:发生事件的组件就是事件源;
事件处理器:负责处理事件的方法;
比如 点击按钮,弹出HelloWord,
那么 事件是 点击按钮 ,事件源就是按钮,事件处理器就会弹出对话框,显示HelloWord.
常用的事件(Event) 有:
鼠标事件(MouseEvent: 鼠标按下,移入,移除,滚轮..)
键盘事件(KeyEvent: 键盘按下,释放..)
动作事件( ActionEvent:当按钮、菜单项被点击,在JTextField中按Enter键时...触发该事件。)
按钮添加接收器, 不同的事件,接收器不同.
比如ActionEvent 那么他的接收器是ActionListener
KeyEvent 那么他的接收器就是KeyListener
基础知识,大概就是这些.
所以想要JButton产生交互,你就需要给他添加事件处理器,当发生这些事件时,出发该处理器,进行处理.
写2个例子,第一个简单的:点击按钮,弹出Hello World
//导入3个图形界面,常用的包
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonDemo extends JFrame {
public ButtonDemo() {
JButton jbHello = new JButton("Hello");//按钮
jbHello.addActionListener(new ActionListener() {//给按钮添加事件接收器
@Override
public void actionPerformed(ActionEvent e) {//接受到事件后,进行下面的处理
System.out.println("Hello World");// 控制台打印输出
JOptionPane.showMessageDialog(null, "Hello World");// 弹出对话框,显示Hello World
}
});
add(jbHello);//把按钮添加到窗体
// 窗体属性的设置
setLayout(new FlowLayout());// 窗体流式布局, 按添加顺序从左到右排列组件
setSize(300, 200);// 宽300像素,高200
setLocationRelativeTo(null);// 窗体放在显示器中间
setTitle("HelloWord");// 窗体的标题
setDefaultCloseOperation(EXIT_ON_CLOSE);// 点击窗体右上角的关闭按钮时,结束程序
setVisible(true);// 窗体可见
}
public static void main(String[] args) {
new ButtonDemo();
}
}
看明白了吧, addActionListener是关键
进阶版 :加法计算器. 代码稍微长一点,.但注释很多
参考代码如下
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//AddFrame继承自JFrame类, 并且实现了ActionListener 接口
public class AddFrame extends JFrame implements ActionListener {
// 组件
JTextField jtf1, jtf2, jtf3;// 文本框,用于:显示数字
JButton jbAdd;// 按钮,用于:当点击按钮时,计算出加法的结果
JButton jbClear;// 按钮, 用于,清空数字
public AddFrame() {// 构造方法
// 初始化组件
jtf1 = new JTextField(5);// 长度为5的文本框
JLabel jl = new JLabel("+");//文字标签
jtf2 = new JTextField(5);
jtf3 = new JTextField(6);
jtf3.setEditable(false);
jbAdd = new JButton("=");
jbAdd.addActionListener(this);//因为本类已经实现了ActionListener接口,所以添加事件的接收器就是自己(this)
jbClear = new JButton("清除");
jbClear.addActionListener(this);
//把组件,添加到窗体
add(jtf1);
add(jl);
add(jtf2);
add(jbAdd);
add(jtf3);
add(jbClear);
// 窗体属性的设置
setLayout(new FlowLayout());//窗体流式布局, 按添加顺序从左到右排列组件
setSize(380, 100);// 宽380像素,高100
setLocationRelativeTo(null);// 窗体放在显示器中间
setTitle("加法计算器");// 窗体的标题
setDefaultCloseOperation(EXIT_ON_CLOSE);// 点击窗体右上角的关闭按钮时,结束程序
setVisible(true);// 窗体可见
}
/*
* 实现ActionListener接口 就必须重写actionPerformed方法
*/
@Override
public void actionPerformed(ActionEvent e) {// 当事件产生后,就会执行actionPerformed里的方法
JButton jbTemp= (JButton) e.getSource();//得到事件源
if(jbTemp==jbAdd) {//如果是从jbAdd产生的事件.那么执行加法操作
//因为是简单案例,就不判断和处理,用户乱输入字母汉字等情况,导致的异常了
int x = Integer.parseInt(jtf1.getText());//从文本框1得到字符串,并转化成数字
int y = Integer.parseInt(jtf2.getText());
jtf3.setText(x+y+"");//计算2个数的和,并显示在文本框3上
}else if(jbTemp==jbClear) {//如果事件源是 jbClear,那么清除文本框的文字
jtf1.setText("");
jtf2.setText("");
jtf3.setText("");
}
}
// main方法
public static void main(String[] args) {
new AddFrame();//创建一个AddFrame的实例
}
}
Q3: 求助能以按钮事件、文本框事件的方式,以图形用户界面的形式显示6位随机数的Java源程序?
package com.xd.gui;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class RandomNum {
private JFrame frame;
private JButton btn;
private JTextArea text;
public static void main(String[] args) {
new RandomNum();
}
public RandomNum() {
init();
}
public void init() {
frame=new JFrame();
btn =new JButton();
text=new JTextArea();
//设置组件属性
btn.setText("生成随机数");
text.setRows(5);
text.setColumns(20);
//设置流式布局,增加组件
frame.setLayout(new FlowLayout());
frame.add(btn);
frame.add(text);
//设置窗体起始位置
frame.setBounds(600, 300, 300, 300);
//添加功能
fun ();
textFun();
//设置窗体可见
frame.setVisible(true);
}
public void fun() {
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
text.setText((int)(Math.random()*899999+100000)+"");
}
});
}
//文本框获得焦点显示6位随机数
public void textFun() {
text.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
text.setText((int)(Math.random()*899999+100000)+"");
}
@Override
public void focusLost(FocusEvent e) {
//失去焦点什么都不做
}
});
}
}
Q4: java计算器16个按钮(要用for循环打出来的)源代码
自己写java按钮事件源代码的java按钮事件源代码,给你参考参考import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Counter implements ActionListener{ /**
* @param args
*/
private JFrame frame;
private JTextField field;
private JButton clear_but;
private JButton[] buttons;
String str="123+456-789*0.=/";
public Counter() {
frame=new JFrame("计算器t\t\t\t\t\t\t");
field=new JTextField(15);
clear_but=new JButton("C");
buttons=new JButton[25];
for(int i=0;istr.length();i++)
{
buttons[i]=new JButton(str.substring(i, i+1));
}
field.setText("");
}
private void init(){
addEventHandler();
frame.setLayout(new BorderLayout());
JPanel n_panel=new JPanel();
JPanel c_panel=new JPanel();
n_panel.setLayout(new FlowLayout());
frame.add(n_panel,BorderLayout.NORTH);
n_panel.add(field);
n_panel.add(clear_but);
c_panel.setLayout(new GridLayout(4,4));
for(int i=0;i16;i++)
{
c_panel.add(buttons[i]);
}
frame.add(c_panel, BorderLayout.CENTER);
}
public void showMe(){
init();
frame.setSize(300, 240);
//frame.pack();// frame.setLocation(400,360);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void addEventHandler(){
//clear_but.addActionListener(new MyActionListener());
clear_but.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
field.setText("");
}
});
for(int i=0;i16;i++)
{
final int in=i;
buttons[i].addActionListener(this);
// @Override
// public void actionPerformed(ActionEvent e) {
// System.out.print(e.getActionCommand());
// //System.out.print(str.substring(in, in+1));
// }
//
}
}
String num="";
String flag="";
//@Override
public void actionPerformed(ActionEvent e) {
String str=e.getActionCommand();
if(str.equals("=")){
Double a=Double.valueOf(num);
Double b=Double.valueOf(field.getText());
double sum=0;
if(flag.equals("+")){
sum=a+b;
field.setText(sum+"");
}
if(flag.equals("-")){
sum=a-b;
field.setText(""+sum);
}
if(flag.equals("*")){
sum=a*b;
field.setText(""+sum);
}
if(flag.equals("/")){
sum=a/b;
field.setText(""+sum);
}
System.out.println(a+flag+b+"="+sum);
}
else if(".0123456789".indexOf(str)!=-1){
String newtext=field.getText();
newtext+=str;
field.setText(newtext);
//System.out.print(str);
}
else if(str.matches("[+*-/]{1}")){
//else if("+-*/".indexOf(str)!=-1){
num=field.getText();
field.setText("");
flag=str;
// System.out.print(str);
}
}
public static void main(String[] args) {
new Counter().showMe();
}}
Q5: JAVA怎么做点击按钮促发事件弹出浏览窗口选择excel文件读取,并显示到另外一个界面上,请给出主要代码
package com.excel;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.swing.JTextArea;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/**
* 解析Excel的类
*/
public class ExcelOperate {
private JTextArea area;
private String fileName;
/**
* 构造方法传值
*
* @param area
* 显示Excel内容的位置
* @param fileName
* Excel文件名
*/
public ExcelOperate(JTextArea area, String fileName) {
this.area = area;
this.fileName = fileName;
}
/**
* 解析Excel文件
*/
public void parseExcel() {
File file = new File(fileName);
String[][] result = null;
try {
result = getData(file, 1);
} catch (IOException e) {
e.printStackTrace();
}
int rowLength = result.length;
for (int i = 0; i rowLength; i++) {
for (int j = 0; j result[i].length; j++) {
area.append(result[i][j] + "\t\t");
}
area.append("\n");
}
}
/**
* 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行
*
* @param file
* 读取数据的源Excel
* @param ignoreRows
* 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1
* @return 读出的Excel中数据的内容
* @throws FileNotFoundException
* @throws IOException
*/
public static String[][] getData(File file, int ignoreRows)
throws FileNotFoundException, IOException {
ListString[] result = new ArrayListString[]();
int rowSize = 0;
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
file));
// 打开HSSFWorkbook
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFCell cell = null;
for (int sheetIndex = 0; sheetIndex wb.getNumberOfSheets(); sheetIndex++) {
HSSFSheet st = wb.getSheetAt(sheetIndex);
// 第一行为标题,不取
for (int rowIndex = ignoreRows; rowIndex = st.getLastRowNum(); rowIndex++) {
HSSFRow row = st.getRow(rowIndex);
if (row == null) {
continue;
}
int tempRowSize = row.getLastCellNum() + 1;
if (tempRowSize rowSize) {
rowSize = tempRowSize;
}
String[] values = new String[rowSize];
Arrays.fill(values, "");
boolean hasValue = false;
for (short columnIndex = 0; columnIndex = row.getLastCellNum(); columnIndex++) {
String value = "";
cell = row.getCell(columnIndex);
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
value = new SimpleDateFormat("yyyy-MM-dd")
.format(date);
} else {
value = "";
}
} else {
value = new DecimalFormat("0").format(cell
.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
// 导入时如果为公式生成的数据则无值
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue();
} else {
value = cell.getNumericCellValue() + "";
}
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
value = "";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
value = (cell.getBooleanCellValue() == true ? "Y"
: "N");
break;
default:
value = "";
}
}
if (columnIndex == 0 value.trim().equals("")) {
break;
}
values[columnIndex] = rightTrim(value);
hasValue = true;
}
if (hasValue) {
result.add(values);
}
}
}
in.close();
String[][] returnArray = new String[result.size()][rowSize];
for (int i = 0; i returnArray.length; i++) {
returnArray[i] = (String[]) result.get(i);
}
return returnArray;
}
/**
* 去掉字符串右边的空格
*
* @param str
* 要处理的字符串
* @return 处理后的字符串
*/
public static String rightTrim(String str) {
if (str == null) {
return "";
}
int length = str.length();
for (int i = length - 1; i = 0; i--) {
if (str.charAt(i) != 0x20) {
break;
}
length--;
}
return str.substring(0, length);
}
}
------------------------------------------------------------------------------------------
package com.excel;
import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
* 主界面,按钮响应事件,文本域输出Excel内容
*/
public class OpenExcel extends JFrame implements ActionListener {
private JButton button;
private JScrollPane pane;
private JTextArea area;
public OpenExcel() {
super("解析Excel");
button = new JButton("点我选择Excel文件");
button.addActionListener(this);
area = new JTextArea();
pane = new JScrollPane(area);
this.add(button, BorderLayout.NORTH);
this.add(pane);
this.setSize(300, 300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
// 按钮事件
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();// 文件选择对话框
chooser.setAcceptAllFileFilterUsed(false);// 取消所有文件过滤项
chooser.setFileFilter(new FileNameExtensionFilter("Excel文件", "xls"));// 设置只过滤扩展名为.xls的Excel文件
int i = chooser.showOpenDialog(this);// 打开窗口
if (i == JFileChooser.APPROVE_OPTION) {
this.setLocation(0, 0);
this.setSize(Toolkit.getDefaultToolkit().getScreenSize());
new ExcelOperate(area, chooser.getSelectedFile().getAbsolutePath())
.parseExcel();
}
}
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new OpenExcel();
}
}
java按钮事件源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java实现简单按钮事件监听、java按钮事件源代码的信息别忘了在本站进行查找喔。





