java - 两个对话框 setAlwaysOnTop(true):第二个生成的对话框在第一个对话框后面
问题描述
我有一个 JDialog 可以生成另一个。这两个 JDialog 具有属性 setAlwaysOnTop(true) 并且不是模态的。从第一个生成的第二个 Jdialog 总是出现在后面。我希望它出现在前面。
我尝试了几件事:toFront()、requestFocus() 等。
这里有一个重现问题的简短示例:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
public class SwingTester {
public static void main(String[] args) {
createWindow();
}
private static void createWindow() {
final JDialog modelDialog = createDialog();
modelDialog.setVisible(true);
}
private static JDialog createDialog(){
final JDialog modelDialog = new JDialog();
modelDialog.setBounds(132, 132, 300, 200);
Container dialogContainer = modelDialog.getContentPane();
dialogContainer.setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
JButton okButton = new JButton("Ok");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final JDialog modelDialog = createDialog();
modelDialog.setVisible(true);
}
});
panel1.add(okButton);
dialogContainer.add(panel1, BorderLayout.SOUTH);
modelDialog.setAlwaysOnTop(true);
return modelDialog;
}
单击确定按钮后,我们会看到另一个对话框出现在当前对话框的后面。新对话框具有焦点,但仍落后
解决方案
实际上,我尝试了您的代码,并且没有出现问题。如果您想看得太清楚,请创建带有随机位置的对话框。在每次点击中,新的对话框都会随机出现在顶部。
modelDialog.setBounds(new Random().nextInt(400), new Random().nextInt(400), 300, 200);
但我的建议是将对话框创建为模态对话框,并将旧对话框设置为父对话框。
推荐阅读
- manpage - .Bl、.It 在 mandoc 中渲染列表在 macOS 和 Ubuntu 16.04 上都不起作用
- shell - Shell:源脚本可以将字符串回显到标准输出 [SH]
- windows - 错误 LNK2019:未解析的外部符号 __CheckForDebuggerJustMyCode 在函数 DriverEntry 中引用
- python - 如何从python中的mysql查询中删除格式
- python - jq基于键值过滤器查询json键
- selenium - 通过 TestNG xml 运行多个类时,它只执行具有多个独立测试的类中的一个测试
- javascript - TypeError: mitsukuApi.send 不是函数
- xcode - git branch commit 没有合并到 master
- c - 使用 SIMD 右移 32 位压缩负数
- ios - 无法创建 IOS 应用程序开发配置文件