java top.dialog控件,java – 如何只为他的父级创建JDialog onTop?
可以說(shuō),我們有幾個(gè)JFrame窗口同時(shí)可見(jiàn),并且每個(gè)窗口都出現(xiàn)JDialog.當(dāng)我們的窗口處于級(jí)聯(lián)模式和對(duì)話框setAlwaysOnTop為真時(shí),所有對(duì)話框?qū)⒃谧詈笠粋€(gè)窗口中可見(jiàn).
我只想將Dialog組件與其所有者關(guān)聯(lián)起來(lái),這樣當(dāng)你在Frames之間切換時(shí),你只會(huì)在頂部獲得一個(gè)對(duì)話框,并且在單擊一個(gè)框架時(shí)不會(huì)丟失該對(duì)話框.
對(duì)話框有這樣的構(gòu)造函數(shù):
setAlwaysOnTop(true);
setModal(false);
提前致謝!
解決方法:
How to make JDialog onTop only for his parent?
> setParent in the constructor properly
>必須使用setModalityType f.e. ModalityType.DOCUMENT_MODAL ModalityType.APPLICATION_MODAL而不是setModal
> setModal對(duì)初始化/是此JDialog的父級(jí)的容器有效
>不要使用多個(gè)JFrame,而是使用JDialog,將此容器重新用于其他操作
例如
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SuperConstructor extends JFrame {
private static final long serialVersionUID = 1L;
public SuperConstructor() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 300));
setTitle("Super constructor");
Container cp = getContentPane();
JButton b = new JButton("Show dialog");
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
FirstDialog firstDialog = new FirstDialog(SuperConstructor.this);
}
});
cp.add(b, BorderLayout.SOUTH);
JButton bClose = new JButton("Close");
bClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
System.exit(0);
}
});
add(bClose, BorderLayout.NORTH);
pack();
setVisible(true);
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
SuperConstructor superConstructor = new SuperConstructor();
}
});
}
private class FirstDialog extends JDialog {
private static final long serialVersionUID = 1L;
FirstDialog(final Frame parent) {
super(parent, "FirstDialog");
setPreferredSize(new Dimension(200, 200));
setLocationRelativeTo(parent);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
JButton bNext = new JButton("Show next dialog");
bNext.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
SecondDialog secondDialog = new SecondDialog(parent, false);
}
});
add(bNext, BorderLayout.NORTH);
JButton bClose = new JButton("Close");
bClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
setVisible(false);
}
});
add(bClose, BorderLayout.SOUTH);
pack();
setVisible(true);
}
}
private int i;
private class SecondDialog extends JDialog {
private static final long serialVersionUID = 1L;
SecondDialog(final Frame parent, boolean modal) {
//super(parent); // Makes this dialog unfocusable as long as FirstDialog is visible
setPreferredSize(new Dimension(200, 200));
setLocation(300, 50);
setModal(modal);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setTitle("SecondDialog " + (i++));
setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
JButton bClose = new JButton("Close");
bClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
setVisible(false);
}
});
add(bClose, BorderLayout.SOUTH);
pack();
setVisible(true);
}
}
}
標(biāo)簽:java,modal-dialog,swing,jdialog
來(lái)源: https://codeday.me/bug/20190529/1179407.html
總結(jié)
以上是生活随笔為你收集整理的java top.dialog控件,java – 如何只为他的父级创建JDialog onTop?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: FusionChart完全入门手册 -2
- 下一篇: 自动化测试遇到的难点_自动化测试过程中遇