Показать окно при наведении на элемент в списке - PullRequest
2 голосов
/ 01 марта 2011

Я хочу показать окно, содержащее информацию, когда пользователь наводит курсор на элемент в списке. Примерно так:

enter image description here

Как я могу это сделать? Это можно увидеть в приложении чата, например, pidgin или spark.

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Возможно, вам нужна подсказка, похожая на функциональность.Если это так, посмотрите на предоставление компонента ListCellRenderer, такого как JLabel, и установите подсказку JLabel.

EG использования HTML-рендеринга в подсказке.

import javax.swing.*;

class LabelWithHtmlTooltip {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                String html = "<html><body>" +
                    "<h1>Header</h1>" +
                    "<img src='http://pscode.org/media/starzoom-thumb.gif' " +
                    "width='160' height='120'>";
                JLabel label = new JLabel("Point at me!");
                label.setToolTipText(html);
                JOptionPane.showMessageDialog(null, label);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
1 голос
/ 01 марта 2011

Вот как я бы попытался это реализовать:

Добавьте MouseListener и MouseMotionListener в свой JList. Когда mouser входит в список, запускается поток, ожидающий определенной задержки (полсекунды). Когда мышь перемещается или перетаскивается, перезапустите, ожидая задержки. Когда мышь выйдет из JList, отмените поток. Используйте этих слушателей, чтобы отслеживать положение мыши.

После того, как задержка достигнута (что должно означать, что мышь оставалась в списке без движения в течение всей задержки), используйте SwingUtilities.invokeLater, чтобы отобразить информационное окно. Вы можете использовать locationToIndex из JList, чтобы определить, над какой строкой находится мышь.

...