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

本文介绍了Java Swing中的Popup类,它用于在组件层次结构顶部显示Component。Popup生命周期短暂,一般通过PopupFactory获取。文章讲解了Popup的构造方法,并提供了一个简单的使用示例,展示了如何在用户操作后显示Popup。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们先来看看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 - 组件鼠标坐标与其相关,它可以为 null
contents - 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值