Java swing,将标记放置在JPanel中图像的位置上

问题描述 投票:0回答:1

我正在尝试使用Java Swing为学校项目创建地图应用程序。有一些地图(使用jpg格式)将使用JComboBox选择,因此我有一种方法可以在JPanel中显示图像(在JScrollPane中),该图像采用的图像路径根据JComboBox的选择而变化。

现在,我具有基于另一个JComBoBox选择的全局变量x和y坐标,并且需要在图像上的坐标处放置一个标记。我该怎么办?

public static void displayImage(String path, JPanel panel, JLabel label) {
    try {
        image = ImageIO.read(new File(path));
    } catch (IOException e1) {
        e1.printStackTrace();
    }

    panel.removeAll();

    panel.add(new JLabel(new ImageIcon(new ImageIcon(image).getImage().getScaledInstance(1920, 1080, Image.SCALE_SMOOTH))));
    panel.revalidate();
    panel.repaint();
}

以及在JscrollPane和JPanel的主要功能中:

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(245, 11, 1010, 659);
    frame.getContentPane().add(scrollPane);
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    label = new JLabel();

    scrollPane.setViewportView(panel);

我曾尝试制作自定义视口并在其上绘制标记,但它不会随图像滚动(标记在图像滚动时位于同一位置)

java swing jpanel jscrollpane
1个回答
0
投票

我需要在图像的坐标上放置一个标记。

您发布的代码与您正在谈论的此“标记”无关。

我尝试制作自定义视口并在其上绘制标记,但它不会随图像滚动

如果要进行自定义绘制,则需要在标签(而不是滚动窗格)上进行自定义绘制。

  1. 首先,您将创建具有两个属性的自定义对象(标记):a)图像b)点。
  2. 然后,您将扩展JLabel并添加类似addMarker(Marker)的方法。 Marker对象将存储在ArrayList
  3. 然后,您将覆盖标签的paintComponent()方法以a)调用super.paintComponent(...)绘制图像。 b)然后遍历ArrayList以绘制每个Marker对象。

或另一种方法是将每个标记图像的JLabel对象添加到主JLabel。基本步骤是:

  1. 使用图像创建JLabel
  2. 使用setSize(markerLabel.getPreferredSize());
  3. 设置标记标签的边界
  4. 将标记标签添加到背景图像标签。
© www.soinside.com 2019 - 2024. All rights reserved.