[英]How to set the JFrame as a parent to the JDialog
我無法將框架設置為對話框的所有者。 通常當我擴展JDialog
類以創建對話框時,我使用super(frame)
來指定對話框的所有者,這樣當按下alt+tab
時它們都不會脫節。 但是當我使用new
JDialog dialog = new JDialog()
創建一個對話框時,我無法將該框架指定為對話框的所有者。
以下示例演示了以上兩種方法。 Top Click
按鈕打開一個沒有擴展JDialog的對話框。 Bottom Click
按鈕打開一個擴展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);
}
}
}
對話框(或窗口)所有者只能在構造函數中設置,因此設置它的唯一方法是使用以所有者作為參數的構造函數,如:
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.