问题描述
我无法将框架设置为对话框的所有者。通常当我扩展 JDialog
类来创建对话框时,我使用 super(frame)
来指定对话框的所有者当按 alt + tab
时,它们都不会脱节。但是当我使用 new
创建对话框时,如 JDialog对话框=新的JDialog()
,那么我无法指定框架作为对话框的所有者。
I am having trouble to set the frame as a owner to the dialog. Normally when I extend JDialog
class for creating a dialog then I use super(frame)
to specify the owner of the dialog such that both of them are not disjoint when you press alt+tab
. But when I create a dialog using new
like JDialog dialog = new JDialog()
then I am unable to specify the frame as owner to the dialog.
以下示例演示了上述两种方法。 热门点击
按钮打开一个对话框,不会扩展JDialog 。 底部点击
按钮打开一个对话框,扩展JDialog 。
Following example demonstrates above two approaches. Top Click
button opens a dialog which is without extending JDialog. Bottom Click
button opens a dialog with extending JDialog.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
public class DialogEx {
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
new DialogEx().createUI();
}
};
EventQueue.invokeLater(r);
}
private void createUI() {
final JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
JButton button1 = new JButton("Top Click");
JButton button2 = new JButton("Bottom Click");
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
new DialogExtend(frame).createUI();
}
});
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
new DialogWithoutExtend(frame).cretaUI();
}
});
frame.setTitle("Test Dialog Instances.");
frame.add(button1, BorderLayout.NORTH);
frame.add(button2, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(300, 200));
frame.setVisible(true);
}
class DialogExtend extends JDialog {
private JFrame frame;
public DialogExtend(JFrame frame) {
super(frame);
this.frame = frame;
}
public void createUI() {
setLocationRelativeTo(frame);
setTitle("Dialog created by extending JDialog class.");
setSize(new Dimension(400, 100));
setModal(true);
setVisible(true);
}
}
class DialogWithoutExtend {
private JFrame frame;
public DialogWithoutExtend(JFrame frame) {
this.frame = frame;
}
public void cretaUI() {
JDialog dialog = new JDialog();
dialog.setTitle("Dialog created without extending JDialog class.");
dialog.setSize(new Dimension(400, 100));
dialog.setLocationRelativeTo(frame);
dialog.setModal(true);
dialog.setVisible(true);
}
}
}
推荐答案
对话框(或窗口)的所有者只能在构造函数中设置 ,因此设置它的唯一方法是使用一个构造函数,该构造函数将所有者作为参数,如:
A dialog's (or window's) owner can be set only in the constructor, so the only way to set it is by using a constructor which takes the owner as parameter, like:
class DialogWithoutExtend {
private JFrame frame;
public DialogWithoutExtend(JFrame frame) {
this.frame = frame;
}
public void cretaUI() {
JDialog dialog = new JDialog(frame);
dialog.setTitle("Dialog created without extending JDialog class.");
dialog.setSize(new Dimension(400, 100));
dialog.setLocationRelativeTo(frame);
dialog.setModal(true);
dialog.setVisible(true);
}
}
这篇关于如何将JFrame设置为JDialog的父级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!