本文目录一览:
- 1、Java给按钮添加事件
- 2、Java 添加按钮点击事件
- 3、java按钮事件
- 4、java怎么给按钮添加事件
- 5、java 按钮事件
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的实例
}
}
Java 添加按钮点击事件
xml文件代码如下:
Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1" /
Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button2" /
四种方法分述如下:
匿名内部类:
public class TestButtonActivity extends Activity {
Button btn1, btn2;
Toast tst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast tst = Toast.makeText(TestButtonActivity.this, "111111111", Toast.LENGTH_SHORT);
tst.show();
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast tst = Toast.makeText(TestButtonActivity.this, "222222222", Toast.LENGTH_SHORT);
tst.show();
}
});
}
}
自定义单击事件监听类:
public class TestButtonActivity extends Activity {
Button btn1, btn2;
Toast tst;
class MyClickListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
tst = Toast.makeText(TestButtonActivity.this, "111111111", Toast.LENGTH_SHORT);
tst.show();
break;
case R.id.button2:
tst = Toast.makeText(TestButtonActivity.this, "222222222", Toast.LENGTH_SHORT);
tst.show();
break;
default:
break;
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(new MyClickListener());
btn2.setOnClickListener(new MyClickListener());
}
}
Activity继承View.OnClickListener,由Activity实现OnClick(View view)方法,在OnClick(View view)方法中用switch-case对不同id代表的button进行相应的处理
public class TestButtonActivity extends Activity implements OnClickListener {
Button btn1, btn2;
Toast tst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
tst = Toast.makeText(this, "111111111", Toast.LENGTH_SHORT);
tst.show();
break;
case R.id.button2:
tst = Toast.makeText(this, "222222222", Toast.LENGTH_SHORT);
tst.show();
break;
default:
break;
}
}
}
最后一种是我今天看到的一种写法,在XML文件中逗显示指定按钮的onClick属性,这样点击按钮时会利用反射的方式调用对应Activity中的click()方法地
Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="Button1" /
Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="Button2" /
这里在输完android:的时候按下 Alt+/ 会有 onClick 属性的提示, 但输入到 android:onClick=逗 的地方按下 Alt+/ 并没有提示 onClick 选项,让我突然觉得这里好像有点问题。
public class TestButtonActivity extends Activity {
Button btn1, btn2;
Toast tst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
}
// 注意 这里没有 @Override 标签
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
tst = Toast.makeText(this, "111111111", Toast.LENGTH_SHORT);
tst.show();
break;
case R.id.button2:
tst = Toast.makeText(this, "222222222", Toast.LENGTH_SHORT);
tst.show();
break;
default:
break;
}
}
}
这种写法整个代码中都不用声明button就可以实现button的单击事件。
java按钮事件
调用顺序:
单击按钮-调用actionPerformed-调用repaint-调用paint。
java怎么给按钮添加事件
类名后面添加一个actionListener 接口
解决方法:
(1)public void actionPerformed(ActionEvent e) {
}
这么一个方法,然后再在构造方法里面添加注册事件,button.addActionListener(this);
(2) 在res/layout中的activity_main.xml添加一个按钮,命名为button1。
(3)在MainActivity.Java中添加按钮事件绑定:
(4) 重写ButtonClickListener函数:
java 按钮事件
代码如下,注意注释:
import java.awt.Container;
import java.awt.event.*;
import javax.swing.*;
public class ShortTest2 extends JFrame implements ActionListener {
JButton jb1;
JPanel j1;
public ShortTest2() {
Container contentPane = this.getContentPane();
j1 = new JPanel();
jb1 = new JButton("Draw");
jb1.addActionListener(this);
j1.add(jb1);
contentPane.add(j1, "North");
}
public static void main(String[] args) {
ShortTest2 m = new ShortTest2();
m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
m.setSize(600, 370);
m.setLocationRelativeTo(null);
m.setVisible(true);
}
public void actionPerformed(ActionEvent ae) {
//主要是这里,按钮一按就执行下面的代码
JOptionPane.showMessageDialog(null, "Hello World!");
}
}