2016-11-22 68 views
-1

我有一个JList:如何显示悬停在JList项目上的JLabel?

comandaListModel = new SortedListModel<String>(); 
    comandaListScrollPane = new JScrollPane(); 
    comandaPanel.add(comandaListScrollPane, BorderLayout.CENTER); 
    comandaList = new JList<String>(comandaListModel); 
    comandaListScrollPane.setViewportView(comandaList); 

而且我有一个自定义的JLabel类:

public class QrCodeLabel extends JLabel { 

    public Image qrCode; 

    public QrCodeLabel(JList list) { 
     super(""); 
     updateQrCode(list); 

    } 

    public void updateQrCode(JList list) { 
     if (ComandaCreationFrame.getQrMatrixes() != null) { 
      this.qrCode = QRGenerator.generateImage(ComandaCreationFrame.getQrMatrixes().get(list.getSelectedValue())).getScaledInstance(this.getWidth(), this.getHeight(), Image.SCALE_SMOOTH); 
      this.setIcon(new ImageIcon(this.qrCode)); 
     } 

    } 

} 

enter image description here

JLabel将大干快上的Jlist的ListSelectionListenervalueChanged更新。我怎样才能“弹出”JLabel将鼠标悬停在JList的每个项目上?是否有可能为JList实现这种“工具提示”功能? (当然,通过“显示”一个JLabel,它也可能意味着一个带有JLabel的JPanel)。

+2

['JToolTip'](http://docs.oracle.com/javase/8/docs/api/javax/swing/JToolTip.html) –

回答

1

您可以实现MouseAdapter来跟踪鼠标在执行特定操作时的功能。

MouseAdaptor自带5种MouseEvent方法,称为“mousePressed”,“mouseReleased”,“mouseEntered”,“mouseExited”和“mouseClicked”。 “mouseEntered”方法就是你用来做这个的。

您还需要导入这些:

java.awt.event.MouseAdapter; 
java.awt.event.MouseEvent; 

创建包含您JList和在类的构造函数,只要它里面添加以下代码:

addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseEntered(MouseEvent e) { 

     } 
    }); 

里面的mouseEntered方法你应该调用你的updateQrCode方法。所以每次鼠标进入列表时,JLabel都会被更新。

欲了解更多信息,请参阅本主题:Java MouseListener

我希望这有助于。