问题描述
我有一个jdialog可以生成另一个。这两个jdialogs具有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);
但是我的建议是,除了将旧对话框设置为父对话框之外,还应将对话框创建为模式对话框。