Java给按钮添加事件 50

现在会添加按钮了,但点击按钮是没有用的,我改怎么加呢,求教,虽然老师没教,但我好想提前学一下JButtonjb=newJButton("点我啥也没有");f.add(jb... 现在会添加按钮了,但点击按钮是没有用的,我改怎么加呢,求教,虽然老师没教,但我好想提前学一下
JButton jb=new JButton("点我啥也没有");
f.add(jb);
暂时会这样了
展开
 我来答
雪飞潇潇
2018-02-23 · TA获得超过6273个赞
知道大有可为答主
回答量:1968
采纳率:91%
帮助的人:844万
展开全部

赞一个, 提前学习, 做好预先 , 是个好习惯.

  • 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的实例
 }
}
yinfengnong
2018-02-23 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2267万
展开全部

示例代码如下:

import java.awt.FlowLayout;
import java.awt.event.*;

import javax.swing.*;

public class Demo10 extends JFrame {

public Demo10() {
this.setTitle("按钮测试");
this.setSize(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setLayout(new FlowLayout());

JButton button1 = new JButton("按钮1");

// 传统按钮监听器添加方式
button1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(null, "我是按钮1!");
}
});
this.add(button1);

JButton button2 = new JButton("按钮2");

// 通过函数接口方式添加按钮监听器,Java8 及以后版本支持
button2.addActionListener(e -> {
JOptionPane.showMessageDialog(null, "我是按钮2!");
});
this.add(button2);
}

public static void main(String[] args) {

new Demo10().setVisible(true);
}
}

运行结果:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
长蒙自在

2019-12-23 · TA获得超过911个赞
知道答主
回答量:778
采纳率:34%
帮助的人:41万
展开全部

事件写在一个类中,可以实现。单击这三个按钮,文本框显示对于按钮的文本。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class  ButtonListener extends JFrame implements ActionListener{
JButton ok, cancel,exit;
JTextField t=new JTextField(8);
public  ButtonListener(String title){
super(title);
this.setLayout(new FlowLayout());
ok = new JButton("确定");
cancel = new JButton("返回");
exit = new JButton("退出");
ok.addActionListener(this);
cancel.addActionListener(this);
exit.addActionListener(this);
getContentPane().add(ok);
getContentPane().add(cancel);
getContentPane().add(exit);
getContentPane().add(t);
}

public void  actionPerformed(ActionEvent e){
if(e.getSource()==ok)
t.setText("确定");
if(e.getSource()==cancel)
t.setText("返回");
if(e.getSource()==exit)
t.setText("退出");
}
public static void main(String args[]) {
ButtonListener pd=new ButtonListener("ActionEvent Demo");
pd.setSize(250,100);
pd.setVisible(true);
}
}

我想把它写成两个类,两个源文件,还实现上面的结果应该怎么写呢?
一个ButtonListener1类,一个 MyListener类
注意:ButtonListener1类和, MyListener类是各写在一个单独的源文件中的。
//ButtonListener1类源文件
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class  ButtonListener1 extends JFrame {
JButton ok, cancel,exit;
JTextField t=new JTextField(8);
public  ButtonListener1(){
//super(title);
this.setLayout(new FlowLayout());
ok = new JButton("确定");
cancel = new JButton("返回");
exit = new JButton("退出");
ok.addActionListener(new MyListener());
cancel.addActionListener(new MyListener());;
exit.addActionListener(new MyListener());;
getContentPane().add(ok);
getContentPane().add(cancel);
getContentPane().add(exit);
getContentPane().add(t);
}

public static void main(String args[]) {
ButtonListener1 pd=new ButtonListener1();
pd.setSize(250,100);
pd.setVisible(true);
}
}

// MyListener类源文件
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class  MyListener implements ActionListener{
public void  actionPerformed(ActionEvent e){
if(e.getActionCommand()=="确定"){

}

if(e.getActionCommand()=="返回"){

}

if(e.getActionCommand()=="退出"){

}
}

满意答案

201405沙小

采纳率:41%12级 2013.12.05

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
class ButtonListener1 extends JFrame
{
JButton ok, cancel, exit;
JTextField t = new JTextField(8);
public ButtonListener1()
{
// super(title);
this.setLayout(new FlowLayout());
ok = new JButton("确定");
cancel = new JButton("返回");
exit = new JButton("退出");
ok.addActionListener(new MyListener(this));
cancel.addActionListener(new MyListener(this));
exit.addActionListener(new MyListener(this));
getContentPane().add(ok);
getContentPane().add(cancel);
getContentPane().add(exit);
getContentPane().add(t);
}
public static void main(String args[])
{
ButtonListener1 pd = new ButtonListener1();
pd.setSize(250, 100);
pd.setVisible(true);
}
}

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class MyListener implements ActionListener
{
private ButtonListener1 frame;
public MyListener()
{
}
public MyListener(ButtonListener1 frame)
{
this.frame = frame;
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand() == "确定")
{
frame.t.setText("确定");
}
if (e.getActionCommand() == "返回")
{
frame.t.setText("返回");
}
if (e.getActionCommand() == "退出")
{
frame.t.setText("退出");
}
}
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
薏苡19980727
2019-12-23 · TA获得超过141个赞
知道答主
回答量:43
采纳率:0%
帮助的人:2.7万
展开全部
检查代码写错没有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式