Hi!
I found a bug in JToggleButton and I want to know if it is a more general bug, and how can it be bypassed.
I have some JToggleButtons grouped in a ButtonGroup. On each of them I registered an action listener and a mouse listener.
By clicking back and forth ,I noticed that occasionally, the JToggleButton does not receive a mouseClicked event - although the mousePressed and mouseReleased are received as expected.
I am running on W2K using j2sdk1.4, and I noticed that happen also in j2sdk 1.3, but now it happens much often.
In the following example code below, the output messages:
Pressed
Released
Clicked
...
Pressed
Released
Clicked
Will soon become:
Pressed
Released
Pressed
Released
It is easy to reproduce the bug:
1.Create some JToggleButtons, group them with a ButtonGroup.
2.Register an action listener and a mouse listener.
3.Start clicking on each other.
4.Soon enough, the mouseClicked method will not be called periodically.
Example Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class
Test extends JApplet
{
public void init()
{
JToggleButton button1 = new JToggleButton("Beep1");
JToggleButton button2 = new JToggleButton("Beep2");
ButtonGroup group = new ButtonGroup();
group.add(button1);
group.add(button2);
JPanel contentPane = new JPanel();
contentPane.add(button1);
contentPane.add(button2);
button1.addMouseListener
(
new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
System.out.println("Clicked");
}
public void mousePressed(MouseEvent e)
{
System.out.println("Pressed");
}
public void mouseReleased(MouseEvent e)
{
System.out.println("Released");
}
}
);
button2.addMouseListener
(
new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
System.out.println("Clicked");
}
public void mousePressed(MouseEvent e)
{
System.out.println("Pressed");
}
public void mouseReleased(MouseEvent e)
{
System.out.println("Released");
}
}
);
button1.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Toolkit.getDefaultToolkit().beep();
}
}
);
button2.addActionListener (
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Toolkit.getDefaultToolkit().beep();
}
}
);
setContentPane(contentPane);
}
}