社区
Java SE
帖子详情
事件监听器应放在程序中的什么地方(就是像button.addMouseListener(this);这样的)
guhuan
2003-12-07 04:36:25
我见过两种,一种是放在main()里,一种是放在构造函数里
...全文
159
9
打赏
收藏
事件监听器应放在程序中的什么地方(就是像button.addMouseListener(this);这样的)
我见过两种,一种是放在main()里,一种是放在构造函数里
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
guhuan
2003-12-12
打赏
举报
回复
awt和swing中的事件监听器一样吗?
现在有了swing是不是就可以不用理awt了,顶多对它有个了解就可以了
guhuan
2003-12-10
打赏
举报
回复
大家帮我顶一下吧,要是分不合适可以加
hfayga
2003-12-10
打赏
举报
回复
能够提前调用的类中噻
xianliti
2003-12-10
打赏
举报
回复
这个是要看情况的
如果你有代码就好说了
simonhappy
2003-12-10
打赏
举报
回复
说错了.
建议写一个专门的方法管理监听器,例如叫addListener,然后放入构造器.不应该写作main中,因为这样在其他地方调用该类,监听器就无法添加了.
simonhappy
2003-12-10
打赏
举报
回复
随便,通常3中:
匿名类;内部类;外部类.
书上推荐内部类.
guhuan
2003-12-07
打赏
举报
回复
可以说详细点吗?我太菜,讲得要是简单了我看不懂的..........
我的意思是它放在什么地方才会起到作用
柒数信息
2003-12-07
打赏
举报
回复
要和这个对象所在同一个引用他的对象里才行吧
loveyousomuch
2003-12-07
打赏
举报
回复
这个要看个人习惯,你说的这种是jb里面的写法,
java
事件监听
器
当你将一个类用作
事件监听
器时,你已经设置好一个特定的事件类型,它会用该类进行监听。接下来的操作是:一个匹配的监听器必须被加入到该组件
中
组件被创建之后,可以在组件上调用如下方法来将监听器与它联系起来
add
Action
Listener
( ) 可用于
Button
,Check, TexyField 等组件
add
Adjustment
Listener
( ) 可用于 ScrollBar 组件
add
Focus
Listener
( ) 可用于所有可视化组件
add
Item
Listener
( ) 可用于
Button
,CheckBox 等组件
add
Key
Listener
( ) 可用于所有可视化组件
add
Mouse
Listener
( ) 可用于所有可视化组件
add
Mouse
Motion
Listener
( ) 可用于所有可视化组件
add
Windows
Listener
( ) 可用于 Window,Frame等组件 例:下面语句创建一个
Button
对象,并将它与动作
事件监听
器联系起来
Button
button
= new
Button
( “OK” ) ;
button
.
add
Action
Listener
( this ) ; //this 指明当前类就是
事件监听
器 2 使用方法 (1)动作事件(ActionEvent) 发生在用户完成了使用下列组件之一的动作:
Button
, CheckBox , ComboBox , TextField , Radio
Button
类为了能够处理这些事件必须实现接口 Action
Listener
。 每个产生一个动作事件的组件上要调用方法
add
Action
Listener
( ) 方法 actionPerformed(ActionEvent evt) 是接口 Action
Listener
惟一的 方法采用如下格式: public void actionPerformed(ActionEvent evt) { //…… } 在 ActionEvent 对象上可以使用的方法: getSource( ) 获取产生事件组件的组件名 getActionCommand( ) 获取与组件有关的文本,如命令按钮的标签 键盘事件(KeyEvent) 发生在键盘上的某个键被按下时。 类为了能够处理这些事件必须实现接口 Key
Listener
。 每个产生一个键盘事件的组件上要调用方法
add
Key
Listener
( ) 在接口 Key
Listener
中
有三个方法: public void keyPressed(KeyEvent evt) { //…… } public void keyReleased(KeyEvent evt) { //…… } public void keyTyped(KeyEvent evt) { //…… } 在 KeyEvent 对象上可以使用的方法: getKeyChar( ) 返回与事件相关的键盘字符的 Unicode 码 . . . . . . . . . .
仿QQ登录窗体,拉伸展开!
package com.Login; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.Action
Listener
; import java.awt.event.
Mouse
Adapter; import java.awt.event.
Mouse
Event; import java.awt.event.
Mouse
MotionAdapter; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.J
Button
; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.UIManager; import com.jdbc.DB; import com.window.Main; public class Login extends JFrame { private JPanel contentPane; private Point pressedPoint; /*private final class LoginAction
Listener
implements Action
Listener
{ public void actionPerformed(ActionEvent e) { // 显示窗体的登录进度面板 getGlassPane().setVisible(true); } }*/ public static void main(String[] args) { try { UIManager .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (Throwable e) { e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { public void run() { try { Login frame = new Login (); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public Login(){ super("登录");
add
Window
Listener
(new WindowAdapter() { @Override public void windowOpened(WindowEvent e) { do_this_windowOpened(e); } }); setUndecorated(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(380,280); setIconImage(new ImageIcon("image\\tubiao.png").getImage()); Dimension displaySize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize=this.getSize(); setLocation((displaySize.width - frameSize.width) / 2+(frameSize.width)/2,(displaySize.height - frameSize.height) / 2); contentPane=new JPanel(); contentPane.setBorder(BorderFactory.createLineBorder(Color.BLACK)); //设置边框为无 contentPane.setLayout(new BorderLayout(0,0));//设置contentPane的布局 setContentPane(contentPane);// JPanel topPanel = new JPanel(){ public void paintComponent(Graphics g) { g.drawImage(new ImageIcon("image\\logintop1.jpg").getImage(), 0, 0,500,48, null); super.paintComponent(g); } };//标题栏panel topPanel.
add
Mouse
Motion
Listener
(new
Mouse
MotionAdapter() { @Override public void
mouse
Dragged(
Mouse
Event e) { do_topPanel_
mouse
Dragged(e); } }); topPanel.
add
Mouse
Listener
(new
Mouse
Adapter() { @Override public void
mouse
Pressed(
Mouse
Event e) { do_topPanel_
mouse
Pressed(e); } }); topPanel.setOpaque(false);//设置背景透明 topPanel.setPreferredSize(new Dimension(500,30)); topPanel.setLayout(null); JPanel panel = new JPanel(); panel.setBounds(312, 0, 66, 15); panel.setOpaque(false); topPanel.
add
(panel); panel.setLayout(new GridLayout(1, 0, 0, 0)); J
Button
button
= new J
Button
("");
button
.setRolloverIcon(new ImageIcon("image\\
button
4.png"));
button
.
add
Action
Listener
(new Action
Listener
() { public void actionPerformed(ActionEvent e) { do_
button
_itemStateChanged(e); } });
button
.setFocusPainted(false);// 取消焦点绘制
button
.setBorderPainted(false);// 取消边框绘制
button
.setContentAreaFilled(false);// 取消内容绘制
button
.setIcon(new ImageIcon("image\\
button
4-1.png")); panel.
add
(
button
); J
Button
button
_2 = new J
Button
("");
button
_2.
add
Action
Listener
(new Action
Listener
() { public void actionPerformed(ActionEvent e) { do_
button
_2_actionPerformed(e); } });
button
_2.setRolloverIcon(new ImageIcon("image\\
button
3.png"));
button
_2.setFocusPainted(false);
button
_2.setContentAreaFilled(false);
button
_2.setBorderPainted(false);
button
_2.setIcon(new ImageIcon("image\\
button
3-1.png")); panel.
add
(
button
_2); contentPane.
add
(topPanel, BorderLayout.NORTH); JPanel backgroundPanel = new JPanel(){ public void paintComponent(Graphics g) { g.drawImage(new ImageIcon("image\\loginframe1.jpg").getImage(), 0, 0,500,300, null); super.paintComponent(g); } };//panel backgroundPanel.setLayout(new GridLayout(1,1)); backgroundPanel.setOpaque(false); JPanel panel1 = new JPanel() { public void paintComponent(Graphics g) { g.drawImage(new ImageIcon("image\\4.png").getImage(), 0, 0,420,200, null); super.paintComponent(g); } }; panel1.setLayout(null); panel1.setOpaque(false); JLabel label1=new JLabel("用户名:"); JLabel label2=new JLabel("密 码:"); final JTextField text1=new JTextField(15); final JPasswordField text2=new JPasswordField(15); label1.setBounds(80,60,60,30); text1.setBounds(160, 60, 150,30); label2.setBounds(80,120,60,30); text2.setBounds( 160, 120, 150, 30); panel1.
add
(label1); panel1.
add
(text1); panel1.
add
(label2); panel1.
add
(text2); backgroundPanel.
add
(panel1); contentPane.
add
(backgroundPanel, BorderLayout.CENTER); JPanel panel2 =new JPanel(); //panel2.setPreferredSize(new Dimension(380,40)); panel2.setLayout(null); panel2.setOpaque(false); J
Button
button
1=new J
Button
("登录"); J
Button
button
2=new J
Button
("取消");
Mouse
Adapter
mouse
Adapter = new
Mouse
Adapter() {// 创建鼠标
事件监听
器 private Rectangle sourceRec;// 创建矩形对象 @Override public void
mouse
Entered(
Mouse
Event e) { J
Button
button
= (J
Button
) e.getSource();// 获取事件源按钮 sourceRec =
button
.getBounds();// 保存按钮大小
button
.setBounds(sourceRec.x-5, sourceRec.y-5, sourceRec.width + 10, sourceRec.height + 10);// 把按钮放大 super.
mouse
Entered(e); } @Override public void
mouse
Exited(
Mouse
Event e) { J
Button
button
= (J
Button
) e.getSource();// 获取事件源按钮 if (sourceRec != null) {// 如果有备份矩形则用它恢复按钮大小
button
.setBounds(sourceRec);// 设置按钮大小 } super.
mouse
Exited(e); } };
button
1.
add
Mouse
Listener
(
mouse
Adapter);
button
2.
add
Mouse
Listener
(
mouse
Adapter);
button
1.setBackground(new Color(154,216,230));
button
2.setBackground(new Color(154,216,230)); //
button
1.setBorder(BorderFactory.createLineBorder(Color.blue) ); //
button
1.setBorder(new EmptyBorder(10, 0, 0, 0));// 顶部留白:40pix //
button
2.setBorder(new EmptyBorder(10, 0, 0, 0));// 顶部留白:40pix
button
1.setBounds(190, 9,70, 30);
button
2.setBounds(280, 9,70, 30); panel2.
add
(
button
1); panel2.
add
(
button
2); panel2.setBounds(0, 200, 380, 50); panel1.
add
(panel2); //
button
1.
add
Action
Listener
( new LoginAction
Listener
());
button
1.
add
Action
Listener
( new Action
Listener
() { public void actionPerformed(ActionEvent event) { Connection con = null; PreparedStatement pstmt = null; ResultSet rs=null; Statement stmt=null; try{ con=DB.getConnection(); pstmt = con.prepareStatement("select *from tb_manager where id=? and password=?"); pstmt.setString(1, text1.getText()); pstmt.setString(2, text2.getText()); rs=pstmt.executeQuery(); JOptionPane pane=new JOptionPane(); if(rs.next()) { // new LoginAction
Listener
(); pane.showMessageDialog(null, "登录成功!"); // new Main(); new Main(); dispose();// 销毁窗体 con.close(); } else if(text1.getText().equals("")||text2.getText().equals("")) { pane.showMessageDialog(null, " 登录失败!用户名或密码不能为空,请重新输入!"); text1.setText(""); text2.setText(""); } else { pane.showMessageDialog(null, "登录失败,你输入的用户名或密码错误,请重新输入!"); text1.setText(""); text2.setText(""); } }catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { DB.close(pstmt); DB.close(pstmt); } } } );
button
2.
add
Action
Listener
( new Action
Listener
() { public void actionPerformed(ActionEvent event) { System.exit(0); } } ); } protected void do_
button
_itemStateChanged(ActionEvent e) { setExtendedState(JFrame.ICONIFIED);// 窗体最小化 } protected void do_
button
_2_actionPerformed(ActionEvent e) { dispose();// 销毁窗体 } protected void do_topPanel_
mouse
Pressed(
Mouse
Event e) { pressedPoint = e.getPoint();// 记录鼠标坐标 } protected void do_topPanel_
mouse
Dragged(
Mouse
Event e) { Point point = e.getPoint();// 获取当前坐标 Point locationPoint = getLocation();// 获取窗体坐标 int x = locationPoint.x + point.x - pressedPoint.x;// 计算移动后的新坐标 int y = locationPoint.y + point.y - pressedPoint.y; setLocation(x, y);// 改变窗体位置 } protected void do_this_windowOpened(WindowEvent e) { final int height = getHeight();// 记录窗体高度 new Thread() {// 创建新线程 public void run() { Rectangle rec = getBounds(); for (int i = 0; i < 385; i += 10) {// 循环拉伸窗体 setBounds(rec.x - i / 2, rec.y, i, height);// 不断设置窗体大小与位置 try { Thread.sleep(15);// 线程休眠10毫秒 } catch (InterruptedException e1) { e1.printStackTrace(); } } } }.start();// 启动线程 } }
华容道 小游戏 源代码
package 华容道; import java.awt.*; import java.awt.event.*; //主函数 public class Main { public static void main(String[] args) { new Hua_Rong_Road(); } } //人物按钮颜色 class Person extends
Button
implements Focus
Listener
{ int number; Color c=new Color(255,245,170); Person(int number,String s) { super(s); setBackground(c);//人物的颜色背景是黄色 this.number=number; c=getBackground();
add
Focus
Listener
(this);//好像是焦点监听器 } public void focusGained(FocusEvent e) { setBackground(Color.red);//只要单击该按钮则按钮变颜色 } public void focusLost(FocusEvent e) { setBackground(c);//上一个按钮回复原先的颜色 } } //华容道总类 class Hua_Rong_Road extends Frame implements
Mouse
Listener
,Key
Listener
,Action
Listener
{ Person person[] = new Person[10];
Button
left,right,above,below;
Button
restart = new
Button
("Start");//重新开始按钮 public Hua_Rong_Road() { init(); setBounds(100,100,320,360); setVisible(true);//设置Frame为可见,默认为不可见 validate();
add
Window
Listener
( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void init() { setLayout(null);
add
(restart); restart.setBounds(100, 320, 120, 25); restart.
add
Action
Listener
(this); String name[]={"我","陆逊","姜维","陈宫","许攸","邓艾","周瑜","庞统","诸葛亮","贾诩"}; for(int k=0;k
add
Mouse
Listener
(this); person[k].
add
Key
Listener
(this);
add
(person[k]); }//为所有的按钮注册所需的东西 person[0].setBounds(104, 54, 100, 100); person[1].setBounds(104,154, 100, 50); person[2].setBounds(54, 154, 50, 100); person[3].setBounds(204, 154, 50, 100);
Java窗体
中
的事件处理之
Button
Java
中
的事件处理机制: 监听器对象是一个实现了特定监听器接口(
Listener
Interface)类的实例 事件源是一个能够注册监听器对象并发送事件对象的对象 当事件发送时候,事件源将事件对象传递给所以注册的监听器 监听器对象将利用事件对象
中
的信息决定如何做出响应 创建一个
Button
test窗体,里面包含三个按钮,点击按钮改变面板的背景颜色: package com.P
鼠标监听事件(
add
Mouse
Listener
)(简单代码例子实现)
import java.awt.BorderLayout; import java.awt.event.
Mouse
Event; import java.awt.event.
Mouse
Listener
; import javax.swing.JFrame; import javax.swing.JLabel; public class Main extends JFrame { // 继承窗体类JFrame /** * */ private static final long serialV
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章