继承于Java JDialog而创建的ConfrimDialog类,分别基于这个类new出两个confirmDialog,都带有Yes & No两个button,然后先弹出一个confirmDialog1,紧接着再弹出confirmDialog2,并且在confirmDialog2弹出时立马点击confirmDialog2的Yes Button,confirmDialog2 的Yes逻辑响应了,但是confirmDialog1的Yes逻辑也响应了这是为什么
时间: 2023-08-19 12:04:16 浏览: 92
这个问题可能是因为你的确认对话框(confirm dialog)共享了同一个事件分发线程(Event Dispatch Thread,EDT)。在Java中,所有的Swing组件事件都是在EDT上处理的,包括按钮点击事件。当你点击confirmDialog2的Yes按钮时,EDT会处理该事件并执行相应的逻辑。然而,由于confirmDialog1和confirmDialog2共享同一个EDT,因此EDT也会同时处理confirmDialog1上的点击事件。
为了解决这个问题,你可以为每个确认对话框创建独立的EDT。这样,当你点击confirmDialog2的Yes按钮时,只有与confirmDialog2关联的EDT会处理该事件,而不会影响confirmDialog1。
下面是一个示例代码,演示如何为每个确认对话框创建独立的EDT:
```java
import javax.swing.*;
public class CustomConfirmDialog extends JDialog {
public CustomConfirmDialog(JFrame parent, String title) {
super(parent, title, true); // 使用 true 创建模态对话框
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(300, 200);
setLocationRelativeTo(parent);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
CustomConfirmDialog dialog1 = new CustomConfirmDialog(frame, "Confirm Dialog 1");
JButton yesButton1 = new JButton("Yes");
JButton noButton1 = new JButton("No");
dialog1.add(yesButton1);
dialog1.add(noButton1);
CustomConfirmDialog dialog2 = new CustomConfirmDialog(frame, "Confirm Dialog 2");
JButton yesButton2 = new JButton("Yes");
JButton noButton2 = new JButton("No");
dialog2.add(yesButton2);
dialog2.add(noButton2);
yesButton1.addActionListener(e -> {
System.out.println("Confirm Dialog 1 - Yes");
dialog1.dispose();
});
noButton1.addActionListener(e -> {
System.out.println("Confirm Dialog 1 - No");
dialog1.dispose();
});
yesButton2.addActionListener(e -> {
System.out.println("Confirm Dialog 2 - Yes");
dialog2.dispose();
});
noButton2.addActionListener(e -> {
System.out.println("Confirm Dialog 2 - No");
dialog2.dispose();
});
dialog1.setVisible(true);
dialog2.setVisible(true);
});
}
}
```
在这个示例中,我们创建了两个独立的确认对话框(dialog1和dialog2),并为每个对话框设置了独立的按钮点击事件处理逻辑。当你点击confirmDialog2的Yes按钮时,只有与confirmDialog2关联的EDT会处理该事件,而confirmDialog1不会受到影响。
希望这个示例能够解决你的问题!如果还有其他问题,请随时提问。
阅读全文