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



我正试图使用JavaSwing为一个学校项目创建一个地图应用程序。有几个地图(jpg格式(将使用JComboBox进行选择,因此我有一种方法在JPanel(在JScrollPane中(中显示图像,该方法采用图像路径,该路径会根据JComboBBox的选择而变化。

现在,我有基于另一个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);

我试过制作一个自定义视口并在上面画一个标记,但它不会随着图像滚动(当图像滚动时,标记保持在同一位置(

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

您发布的代码与您所说的这个"标记"无关。

我试过制作一个自定义视口并在上面画一个标记,但它不会随着图像滚动

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

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

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

  1. 使用图像创建JLabel
  2. 使用setSize(markerLabel.getPreferredSize(((
  3. 设置标记标签的边界
  4. 将标记标签添加到背景图像标签中

最新更新