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

Я отображаю эскизы в 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);
            }
        });
    }
}

Замечания:

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