java - Java swing,将标记放置在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);
我尝试制作自定义视口并在其上绘制标记,但它不会随图像一起滚动(图像滚动时标记保持在同一位置)
解决方案
我需要在图像上的坐标处放置一个标记。
您发布的代码与您正在谈论的这个“标记”无关。
我尝试制作自定义视口并在其上绘制标记,但它不会随图像滚动
如果要进行自定义绘画,则需要在标签(而不是滚动窗格)上进行自定义绘画。
- 首先,您将创建一个具有两个属性的自定义对象(标记):a)图像 b)点。
- 然后,您将扩展 JLabel 并添加一个类似
addMarker(Marker)
. Marker 对象将存储在 ArrayList 中 - 然后,您将覆盖标签的 paintComponent() 方法,以 a) 调用 super.paintComponent(...) 来绘制图像。b) 然后遍历 ArrayList 以绘制每个 Marker 对象。
或者另一种方法是将每个标记图像的 JLabel 对象添加到主 JLabel。基本步骤是:
- 使用图像创建 JLabel
- 使用 setSize(markerLabel.getPreferredSize());
- 设置标记标签的边界
- 将标记标签添加到背景图像标签。
推荐阅读
- python - Python tkinter 在类或帧之间传递变量
- c# - 以编程方式获取 BIOS 引导菜单键
- python - Geoviews + Datashader在投影点时很慢
- mysql - 未来预期销售查询的功能将不会运行 - MySQL
- powershell - 如何捕获异常以使异常消息不在控制台上打印?
- python - Python CSV 文件读取和保存
- c# - 相关删除性能问题
- machine-learning - 正在寻找合适的方法来根据残差或预测误差检查模型的优劣?
- regex - 使用 Perl 打印整个字符串,直到出现子字符串匹配
- google-app-engine - 如何思考微服务?