From bcaf93377d20a3c6fe5e0ef5da26c93a785d0778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=81=E5=86=9C=E9=98=BF=E6=A5=A0?= Date: Thu, 16 Oct 2025 01:26:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=97=B6=E5=8F=AF=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E4=BF=9D=E5=AD=98=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/example/ImageDotMarker.java | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/example/ImageDotMarker.java b/src/main/java/org/example/ImageDotMarker.java index a3700e2..193e995 100644 --- a/src/main/java/org/example/ImageDotMarker.java +++ b/src/main/java/org/example/ImageDotMarker.java @@ -452,19 +452,43 @@ public class ImageDotMarker extends JFrame { return; } - StringBuilder sb = new StringBuilder(); - sb.append("图片标记点坐标:\n"); - for (int i = 0; i < points.size(); i++) { - MarkPoint p = points.get(i); - sb.append(String.format("%d. %s: (%d, %d)\n", i + 1, p.name, p.x, p.y)); + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setSelectedFile(new File("mark_points.txt")); + fileChooser.setFileFilter(new FileNameExtensionFilter("文本文件 (*.txt)", "txt")); + + int result = fileChooser.showSaveDialog(this); + if (result == JFileChooser.APPROVE_OPTION) { + try { + File file = fileChooser.getSelectedFile(); + if (!file.getName().toLowerCase().endsWith(".txt")) { + file = new File(file.getAbsolutePath() + ".txt"); + } + + StringBuilder sb = new StringBuilder(); + // 添加头部信息 + sb.append("# 图片标记点坐标导出\n"); + if (currentImagePath != null) { + sb.append(String.format("# 来源图片: %s\n", new File(currentImagePath).getName())); + } + sb.append(String.format("# 导出时间: %s\n", new java.util.Date())); + sb.append("# ======================================\n\n"); + + // 添加标记点数据 + sb.append("序号,名称,X坐标,Y坐标\n"); + for (int i = 0; i < points.size(); i++) { + MarkPoint p = points.get(i); + sb.append(String.format("%d,%s,%d,%d\n", i + 1, p.name, p.x, p.y)); + } + + // 写入文件 + java.nio.file.Files.write(file.toPath(), sb.toString().getBytes("UTF-8")); + + JOptionPane.showMessageDialog(this, "标记点坐标导出成功!\n保存位置: " + file.getAbsolutePath()); + updateStatusBar("已导出标记点坐标到文件"); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "导出失败: " + ex.getMessage()); + } } - - JTextArea textArea = new JTextArea(sb.toString()); - textArea.setEditable(false); - JScrollPane scrollPane = new JScrollPane(textArea); - scrollPane.setPreferredSize(new Dimension(300, 200)); - - JOptionPane.showMessageDialog(this, scrollPane, "标记点坐标", JOptionPane.INFORMATION_MESSAGE); } private void updatePointList() {