Как создать карту изображения с помощью Java Swing? - PullRequest
0 голосов
/ 08 октября 2009

Мне нужно создать карту изображений с помощью Swing, которая отображает фоновое изображение, а затем, когда мышь наводит курсор (или щелкает) на определенные горячие точки, мне нужно открыть «увеличенное» изображение и отобразить его.

Я думал о том, чтобы расширить JPanel, чтобы включить ссылку на изображение и нарисовать его с помощью метода paintComponent (g). Эту часть я уже сделал, а вот код:

public class ImagePanel extends JPanel
{
    private static final long serialVersionUID = 1L;

    private Image image;

    public ImagePanel(Image image)
    {
        setImage(image);
    }

    public void setImage(Image newImage)
    {
        image = newImage;
    }

    @Override
    public void paintComponent(Graphics g)
    {
        Dimension size = getSize();
        g.drawImage(image, 0, 0, size.width, size.height, this);
    }

Может ли кто-нибудь порекомендовать, как я могу прослушивать / реагировать на щелчки мышью в определенных горячих точках? Может ли кто-нибудь дополнительно порекомендовать метод отображения всплывающих окон? Моя внутренняя реакция заключалась в расширении JPopupMenu, чтобы оно отображало изображение, подобное приведенному выше коду.

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 08 октября 2009

Я бы наверное:

  • создайте некоторый экземпляр Shape, который представляет каждую из ваших горячих точек (это может быть простой скучный старый прямоугольник или посмотрите GeneralPath, если вам нужно создать причудливые фигуры)
  • зарегистрируйте MouseListener, который выполняет итерацию по каждой из фигур и вызывает его метод contains (), чтобы увидеть, находится ли координата, по которой щелкнули, внутри рассматриваемой горячей точки
2 голосов
/ 08 октября 2009

Для прослушивания щелчков мыши используйте интерфейс MouseListener и добавьте его на свою панель. Затем, когда щелчок получен, вы можете использовать JPopupMenu, как вы предложили, или вы можете даже использовать стеклянную панель, чтобы показать увеличенное изображение.

Полагаю, вы хотите добиться чего-то похожего на этот пост Джошуа Мариначчи, он также разместил источник здесь , я бы посмотрел на это.

...