我们先来看看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之后可以看到