首页 > 解决方案 > 两个对话框 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;
   }

在此处输入图像描述

在此处输入图像描述

单击确定按钮后,我们会看到另一个对话框出现在当前对话框的后面。新对话框具有焦点,但仍落后

标签: javaswingjdialog

解决方案


实际上,我尝试了您的代码,并且没有出现问题。如果您想看得太清楚,请创建带有随机位置的对话框。在每次点击中,新的对话框都会随机出现在顶部。

modelDialog.setBounds(new Random().nextInt(400), new Random().nextInt(400), 300, 200);

但我的建议是将对话框创建为模态对话框,并将旧对话框设置为父对话框。


推荐阅读