Java 摆动,在 JPanel 中的图像上的某个位置放置标记
Java swing, place marker at a location on an image in JPanel
我正在尝试使用 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);
我试过制作自定义视口并在其上绘制标记,但它不随图像滚动(图像滚动时标记保持在同一位置)
I need to place a marker at the coordinates on the image.
您发布的代码与您所说的 "marker" 无关。
I have tried making a custom viewport and painting a marker on that, but it does not scroll with the image
如果要自定义绘制,需要在label(不是scroll pane)上自定义绘制。
- 首先,您将创建一个具有两个属性的自定义对象(标记):a) 图像 b) 点。
- 然后您将扩展 JLabel 并添加类似
addMarker(Marker)
的方法。 Marker 对象将存储在 ArrayList 中
- 然后您将覆盖标签的 paintComponent() 方法以 a) 调用 super.paintComponent(...) 来绘制图像。 b) 然后遍历 ArrayList 来绘制每个 Marker 对象。
或者另一种方法是将每个标记图像的 JLabel 对象添加到主 JLabel。基本步骤是:
- 使用图像创建 JLabel
- 使用 setSize( markerLabel.getPreferredSize() );
- 设置标记标签的边界
- 将标记标签添加到背景图像标签中。
我正在尝试使用 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);
我试过制作自定义视口并在其上绘制标记,但它不随图像滚动(图像滚动时标记保持在同一位置)
I need to place a marker at the coordinates on the image.
您发布的代码与您所说的 "marker" 无关。
I have tried making a custom viewport and painting a marker on that, but it does not scroll with the image
如果要自定义绘制,需要在label(不是scroll pane)上自定义绘制。
- 首先,您将创建一个具有两个属性的自定义对象(标记):a) 图像 b) 点。
- 然后您将扩展 JLabel 并添加类似
addMarker(Marker)
的方法。 Marker 对象将存储在 ArrayList 中
- 然后您将覆盖标签的 paintComponent() 方法以 a) 调用 super.paintComponent(...) 来绘制图像。 b) 然后遍历 ArrayList 来绘制每个 Marker 对象。
或者另一种方法是将每个标记图像的 JLabel 对象添加到主 JLabel。基本步骤是:
- 使用图像创建 JLabel
- 使用 setSize( markerLabel.getPreferredSize() );
- 设置标记标签的边界
- 将标记标签添加到背景图像标签中。