Java Swing——使用弹出菜单:Popup类

来源:互联网 发布:各大电商平台比价软件 编辑:程序博客网 时间:2024/05/27 19:28

我们先来看看javax.swing.Popup的描述:

Popup 用于向用户显示 Component,它通常位于特定包含层次结构中所有其他 Component 的顶部。Popup 的生命周期很短。获取 Popup 并将它隐藏(调用 hide 方法)后,不应再对它调用任何方法。这允许 PopupFactory 缓存 Popup,以便将来使用。

一般不显式创建 Popup 的实例,而是改为从 PopupFactory 获取。

构造方法详细信息

protected Popup(Component owner,                Component contents,                int x,                int y)为包含 Component content 的 Component owner 创建 Popup。owner 用于确定对于哪一个 Window 新 Popup 是 Component(Popup 创建的)的父级。null owner 暗示不存在有效的父级。x 和 y 指定放置 Popup 的首选初始位置。基于屏幕大小或其他参数,Popup 不能显示在 x 和 y 处。参数:owner - 组件鼠标坐标与其相关,它可以为 nullcontents - Popup 的内容x - 初始 x 屏幕坐标y - 初始的 y 屏幕坐标抛出:IllegalArgumentException - 如果内容为 null

那具体怎么使用呢?来看一个简单的例子:

代码示例:

package mouseTest;import java.awt.Color;import java.awt.Component;import java.awt.Point;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.Popup;import javax.swing.PopupFactory;import javax.swing.SwingUtilities;public class MouseTan extends JFrame{    private JLabel icon;    private JButton jb;    private JPanel panel;    private Popup pop=null;    public MouseTan(){        setBounds(100, 100, 300, 300);        icon=new JLabel(new ImageIcon(this.getClass().getResource("date.gif")));        icon.setToolTipText("点击我,会弹出一个窗口");        icon.setBounds(20,20,20,25);        icon.addMouseListener(new MouseAdapter(){            public void mousePressed(MouseEvent e){                showPanel(icon);            }        });        initPanel();        setLayout(null);        getContentPane().add(icon);        setVisible(true);        setDefaultCloseOperation(3);    }    public void initPanel(){        panel=new JPanel();        jb=new JButton();        jb.setText("看,弹出来一个组件了吧?");        panel.add(jb);        panel.setBackground(Color.pink);    }    public void showPanel(Component owner){        if(pop!=null)            pop.hide();        Point show=new Point(0,icon.getHeight());        SwingUtilities.convertPointToScreen(show, icon);        pop=PopupFactory.getSharedInstance().getPopup(owner, panel, show.x, show.y);        pop.show();    }    public static void main(String[] args) {        new MouseTan();    }}

点击icon之后可以看到

pop.png