怎么区分关闭窗口前 焦点 是在非模态的JDialog还是在父窗口 给出代码
时间: 2024-04-09 08:32:45 浏览: 46
支持弹出图片文字和表单模态框代码
以下是一个示例代码,展示如何区分关闭窗口前焦点是在非模态的 JDialog 还是在父窗口:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class FocusDemo extends JFrame {
private JDialog dialog;
private boolean focusInDialog = false;
public FocusDemo() {
setTitle("Focus Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton openDialogButton = new JButton("Open Dialog");
openDialogButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openDialog();
}
});
add(openDialogButton, BorderLayout.NORTH);
JTextField textField = new JTextField();
add(textField, BorderLayout.CENTER);
pack();
setLocationRelativeTo(null);
}
private void openDialog() {
dialog = new JDialog(this, "Dialog", true);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.addWindowFocusListener(new WindowFocusListener() {
public void windowGainedFocus(WindowEvent e) {
focusInDialog = true;
}
public void windowLostFocus(WindowEvent e) {
focusInDialog = false;
}
});
JButton closeButton = new JButton("Close Dialog");
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.dispose();
}
});
dialog.add(closeButton, BorderLayout.NORTH);
dialog.pack();
dialog.setLocationRelativeTo(this);
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FocusDemo demo = new FocusDemo();
demo.setVisible(true);
}
});
}
@Override
public void windowClosing(WindowEvent e) {
if (focusInDialog) {
System.out.println("焦点在非模态的 JDialog");
} else {
System.out.println("焦点在父窗口");
}
dispose();
}
}
```
在上面的示例代码中,我们创建了一个继承自 JFrame 的 FocusDemo 类。该类包含一个按钮,点击按钮将打开一个非模态的 JDialog。在 JDialog 中,我们通过监听窗口焦点的变化来更新 focusInDialog 变量。在父窗口的 `windowClosing` 方法中,我们根据 focusInDialog 的值来判断焦点位置,并输出相应的信息。
请注意,这只是一个简单示例,你可以根据自己的需求进行修改和扩展。
阅读全文