标题:JLabel和MouseListener
只看楼主
ck0311
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2007-2-13
 问题点数:0 回复次数:3 
JLabel和MouseListener

我写了一个程序,发现一个问题,如下:
public void mouseReleased(MouseEvent e)//鼠标按钮在组件上释放时调用
这个方法是鼠标按钮在组件上释放时调用,为什么我在组件上按下,然后将鼠标拖出组件后才释放也会调用??

程序代码如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class Chen extends JPanel implements MouseListener
{
private JLabel[] l = new JLabel [3];
public Chen()
{
setPreferredSize (new Dimension (300, 100));

l[0] = new JLabel ("我");
l[1] = new JLabel (" 是");
l[2] = new JLabel ("白痴");

for (int i=0; i<3; i++)
{
l[i].setBorder (new EmptyBorder(2, 2, 2, 2));
l[i].addMouseListener (this);
add (l[i]);
}
}
public void mouseClicked(MouseEvent e)//鼠标按键在组件上单击(按下并释放)时调用
{
if (e.getSource() == l[0])
{
if (l[0].getText().equals("我"))
l[0].setText ("你");
else
l[0].setText ("我");
}
if (e.getSource() == l[1])
{
if (l[1].getText().equals(" 是"))
l[1].setText ("不是");
else
l[1].setText (" 是");
}
if (e.getSource() == l[2])
{
if (l[2].getText().equals("白痴"))
l[2].setText ("天才");
else
l[2].setText ("白痴");
}
}
public void mouseEntered(MouseEvent e)//鼠标进入到组件上时调用
{
JLabel l = (JLabel)e.getSource();
l.setBorder (new BevelBorder (BevelBorder.RAISED));
}
public void mouseExited(MouseEvent e)//鼠标离开组件时调用
{
JLabel l = (JLabel)e.getSource();
l.setBorder (new EmptyBorder(2, 2, 2, 2));
}
public void mousePressed(MouseEvent e)//鼠标按键在组件上按下时调用
{
JLabel l = (JLabel)e.getSource();
l.setBorder(new BevelBorder (BevelBorder.LOWERED));
}
public void mouseReleased(MouseEvent e)//鼠标按钮在组件上释放时调用
{
JLabel l = (JLabel)e.getSource();
l.setBorder(new BevelBorder (BevelBorder.RAISED));
}
public static void main (String[] args)
{
JFrame f = new JFrame ("GUI");
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
f.setResizable(false);//设置此窗体不可由用户调整大小

f.getContentPane().add (new Chen());
f.pack();
f.setVisible (true);
}
}

搜索更多相关主题的帖子: JLabel 
2007-06-25 13:59
可可熊
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:553
专家分:0
注 册:2007-6-15
得分:0 
我测试的鼠标按下去移开后释放不调用的啊!
2007-06-25 21:55
ck0311
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2007-2-13
得分:0 
不可能啊,我试了几百次,当你在JLabel上按住不动后,移出JLabel再放开,那个JLabel的Border变成了凸起的样子。也就是调用了public void mouseReleased(MouseEvent e)方法。由于说明是写的鼠标按钮在组件上释放时调用,而我是在JLabel外面释放的。怎么会这样呢?谁知道怎么解决这个问题?

2007-06-26 16:50
heilong
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:777
专家分:0
注 册:2007-6-7
得分:0 
不可能吧,我觉得没问题啊!不应该在JLABLE外释放会调用啊?
我在网吧,不然帮你测试下!!!

风水鸡蛋壳,财去人安乐!----->
2007-06-26 17:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-150133-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.025155 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved