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

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

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

1 Ответ

3 голосов
/ 23 января 2012

Одним из способов является использование подсказки.

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 лучше, поскольку оно дает вам больше контроля над тем, где и как долго появляется всплывающее окно, а также за его точный вид,Но этот хак значительно короче.;)
...