将鼠标悬停时将显示图片的面板

时间:2014-07-26 18:17:53

标签: java swing user-interface jpanel jlabel

我希望jpanel1不可见,直到其中一个jlabel被鼠标悬停。然后JPanel1必须变为可见,并且JLable(称为jLabel1)必须将其图像设置为正被鼠标悬停的JLabel之一。

public GUI() 
{

    initComponents();
    jPanel1.setVisible(false);



    for(int i =4; i<12;i++)
    {
        JLabel l = new JLabel();
        l.setIcon(new ImageIcon(i+".jpg"));
        p1.add(l);
    }
    for(int i =12; i<20;i++)
    {
        JLabel l = new JLabel();
        l.setIcon(new ImageIcon(i+".jpg"));
        p2.add(l);
    }
}

下面是我程序的2张图片的链接,一张在设计视图中显示侧面板,另一张在实际程序运行时。当用户将鼠标悬停在图片网格中的一个jlabel上时,我希望左边的JPanel可见(参见运行程序的屏幕截图)。左侧面板顶部的jLabel必须将其图像设置为用户将鼠标悬停在图像网格中的图像。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为你在JLabel网格中有一个缩略图 ImageIcons的网格,并且你想在网格的左边显示一个更大的缩略图。如果是这样的话:

  • 我不会让JPanel出现并消失。
  • 而是有一个JPanel,左边是JLabel。
  • 提供JLabel MouseMotionListeners。
  • 当鼠标输入标签时,让侦听器获取相应的大型ImageIcon,与缩略图对应的ImageIcon,并在左侧显示大的JLabel,通过setIcon(...)显示它。

修改
您在评论中说明:

  

我知道这是如何工作的,虽然我不知道如何获得合适的图像图标,因为右边当前有图片的所有JLabel都被命名为相同的名字(来自我的for循环)。我如何获得单独的JLabel信息(在这种情况下是JLabel的ImageIcon。

请理解变量名称并不是那么重要,而重要的是对象引用。一种可能的解决方案是创建一个Map,例如HashMap<Icon, Icon>。如果这样做,您可以将每个小缩略图ImageIcon与其较大的ImageIcon相关联。然后在MouseMotionListener中,获取鼠标通过(JLabel) getSource()输入的标签,通过getIcon()获取其缩略图图标,如果不是null(选中!),请使用您的地图获取与之关联的较大图标用缩略图。