How to set the JFrame as a parent to the JDialog(如何将 JFrame 设置为 JDialog 的父级)
问题描述
我无法将框架设置为对话框的所有者.通常,当我扩展 JDialog 类来创建对话框时,我会使用 .但是,当我使用 super(frame) 来指定对话框的所有者,这样当您按下 <代码>alt+tabnew 之类的 JDialog dialog = new 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.
以下示例演示了上述两种方法.Top Click 按钮打开一个没有扩展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 的父级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何将 JFrame 设置为 JDialog 的父级
基础教程推荐
- 如何在 Spring @Value 注解中正确指定默认值? 2022-01-01
- 在 Java 中创建日期的正确方法是什么? 2022-01-01
- 验证是否调用了所有 getter 方法 2022-01-01
- Java Swing计时器未清除 2022-01-01
- 如何在 JFrame 中覆盖 windowsClosing 事件 2022-01-01
- 从 python 访问 JVM 2022-01-01
- 大摇大摆的枚举 2022-01-01
- 多个组件的复杂布局 2022-01-01
- 不推荐使用 Api 注释的描述 2022-01-01
- Java 实例变量在两个语句中声明和初始化 2022-01-01
