From b5b689740eee51eacf4bbff626b4690c3e950110 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:59:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=80=80=E5=87=BA=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/example/ImageDotMarker.java | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/example/ImageDotMarker.java b/src/main/java/org/example/ImageDotMarker.java index 69c3053..3a9d63a 100644 --- a/src/main/java/org/example/ImageDotMarker.java +++ b/src/main/java/org/example/ImageDotMarker.java @@ -30,10 +30,18 @@ public class ImageDotMarker extends JFrame { public ImageDotMarker() { setTitle("图片标点工具"); setSize(1200, 800); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // 先不自动退出 setLayout(new BorderLayout()); // 设置窗口在屏幕中心显示 setLocationRelativeTo(null); + + // 添加窗口关闭监听器 + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + confirmExit(); + } + }); // 只保留工具栏 createToolbar(); @@ -104,7 +112,7 @@ public class ImageDotMarker extends JFrame { JButton exitBtn = new JButton("退出"); exitBtn.setToolTipText("退出程序"); - exitBtn.addActionListener(e -> System.exit(0)); + exitBtn.addActionListener(e -> confirmExit()); toolBar.add(helpBtn); toolBar.add(aboutBtn); @@ -237,6 +245,24 @@ public class ImageDotMarker extends JFrame { updateStatusBar("已添加标记点: " + points.size()); } + private void confirmExit() { + // 检查是否有已标记的点 + if (!points.isEmpty()) { + int confirm = JOptionPane.showConfirmDialog(this, + "您有未保存的标记点。确定要退出程序吗?", + "确认退出", + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE); + + if (confirm == JOptionPane.YES_OPTION) { + System.exit(0); + } + } else { + // 如果没有标记点,直接退出 + System.exit(0); + } + } + private void updateStatusBar(String message) { // 直接使用类成员变量,避免查找和类型转换错误 JLabel statusLabel = (JLabel) statusPanel.getComponent(0);