怎么区分关闭窗口前 焦点 是在非模态的JDialog还是在父窗口
时间: 2024-04-09 21:32:43 浏览: 22
在非模态的JDialog和父窗口之间区分焦点的方法是通过调用`KeyboardFocusManager`类的`getFocusedWindow()`方法来获取当前焦点所在的窗口。然后,可以使用`instanceof`关键字来判断焦点所在的窗口是非模态的JDialog还是父窗口。以下是一个示例代码:
```java
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class FocusExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Focus Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
JButton button = new JButton("Open Dialog");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog dialog = new JDialog(frame, "Dialog", false);
dialog.setSize(200, 100);
dialog.setLocationRelativeTo(frame);
dialog.setVisible(true);
}
});
frame.getContentPane().add(button);
frame.setVisible(true);
KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
Window activeWindow = focusManager.getFocusedWindow();
if (activeWindow instanceof JDialog) {
System.out.println("焦点在非模态的JDialog上");
} else if (activeWindow == frame) {
System.out.println("焦点在父窗口上");
}
}
}
```
运行以上代码,当点击"Open Dialog"按钮打开一个JDialog时,将会根据焦点所在的窗口进行输出。