Name: vi73552 Date: 05/03/99
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
class PopupBug extends JFrame
{
public static void main(String[] args)
{
PopupBug a = new PopupBug();
a.setSize(600, 300);
a.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
System.exit(0);
}
}
);
a.setVisible(true);
}
class foo extends AbstractAction
{
foo()
{
super("foo");
}
public void actionPerformed(ActionEvent evt)
{
text.append("action fired\n");
}
}
private JTextArea text;
PopupBug()
{
text = new JTextArea();
Container content = getContentPane();
content.setLayout(new BorderLayout());
content.add(new JScrollPane(text), BorderLayout.CENTER);
JTextArea desc = new JTextArea();
desc.append("Right Click to display popup menu in text area\n");
desc.append("Cancel menu by clicking outside menu\n");
desc.append("Note that *popupMenuwillBecomeInvisible* is called instead of *popupMenuCanceled*");
content.add(desc, BorderLayout.SOUTH);
text.addMouseListener(new PopupMouseAdapter());
}
class PopupMouseAdapter extends MouseAdapter
{
private void checkPopup(MouseEvent evt)
{
if (evt.isPopupTrigger())
{
int x = evt.getX();
int y = evt.getY();
PopupMenuListener ml = new PopupMenuListener()
{
public void popupMenuWillBecomeVisible(PopupMenuEvent e)
{
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e)
{
text.append("in popupMenuWillBecomeInvisible\n");
}
public void popupMenuCanceled(PopupMenuEvent e)
{
text.append("in popupMenuCanceled\n");
}
};
JPopupMenu m = new JPopupMenu();
//m.setLightWeightPopupEnabled(false);
m.addPopupMenuListener(ml);
m.add(new foo());
m.show((Component) evt.getSource(), x, y);
}
}
public void mousePressed(MouseEvent evt)
{
checkPopup(evt);
}
public void mouseReleased(MouseEvent evt)
{
checkPopup(evt);
}
public void mouseClicked(MouseEvent evt)
{
checkPopup(evt);
}
}
}
(Review ID: 57353)
======================================================================