Показать полное изображение при наведении указателя мыши на миниатюру в виде всплывающего окна/надписи

Я показываю миниатюры в JPanel. При наведении курсора на такой эскиз я хочу отобразить его полную версию в оверлее над миниатюрой.

Используя HTML, я бы просто создал div с соответствующими позициями и высоким z-индексом, чтобы он накладывал все остальное. С Swing возможно что-то похожее и легкое?

Ответ 1

Один из способов - использовать подсказку.

ThumbTip

import javax.swing.*;
import java.awt.GridLayout;

class ThumbTip {

    private static final String HTML = "<html><body>";

    ThumbTip(String[] album) {
        JPanel p = new JPanel(new GridLayout(1,0,2,2));
        for (String url : album) {
            String s = HTML + "<img src='" + url.toString() + "'";
            String size = " width=200 height=150";
            JLabel l = new JLabel(s + size + ">");
            l.setToolTipText(s + ">");
            p.add(l);
        }
        JOptionPane.showMessageDialog(null, p);
    }

    public static void main(String[] args) {
        final String[] urls = {
            "http://pscode.org/media/stromlo1.jpg",
            "http://pscode.org/media/stromlo2.jpg"
        };
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ThumbTip(urls);
            }
        });
    }
}

Примечание:

  • В этой демонстрации. образ инструментальной подсказки загружается из сети каждый раз, когда он используется. Потерпи.
  • Я не потрудился "уменьшать" исходные изображения. "Батареи не включены". Последнее изменение источника использует HTML (width/height, указанный для image), чтобы сжать "миниатюры". Я не буду обновлять скриншот.
  • В конечном итоге предложение использовать JWindow лучше, так как оно дает вам больше контроля над тем, где и как долго появляется всплывающее окно, а также его точный вид. Но этот хак значительно короче.;)