导出时可选择保存目录

This commit is contained in:
2025-10-16 01:26:49 +08:00
parent abebfe7958
commit bcaf93377d
+36 -12
View File
@@ -452,19 +452,43 @@ public class ImageDotMarker extends JFrame {
return; return;
} }
StringBuilder sb = new StringBuilder(); JFileChooser fileChooser = new JFileChooser();
sb.append("图片标记点坐标:\n"); fileChooser.setSelectedFile(new File("mark_points.txt"));
for (int i = 0; i < points.size(); i++) { fileChooser.setFileFilter(new FileNameExtensionFilter("文本文件 (*.txt)", "txt"));
MarkPoint p = points.get(i);
sb.append(String.format("%d. %s: (%d, %d)\n", i + 1, p.name, p.x, p.y)); 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() { private void updatePointList() {