java top.dialog控件,java – 如何只为他的父级创建JDialog onTop?
可以說,我們有幾個JFrame窗口同時可見,并且每個窗口都出現JDialog.當我們的窗口處于級聯模式和對話框setAlwaysOnTop為真時,所有對話框將在最后一個窗口中可見.
我只想將Dialog組件與其所有者關聯起來,這樣當你在Frames之間切換時,你只會在頂部獲得一個對話框,并且在單擊一個框架時不會丟失該對話框.
對話框有這樣的構造函數:
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對初始化/是此JDialog的父級的容器有效
>不要使用多個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);
}
}
}
標簽:java,modal-dialog,swing,jdialog
來源: https://codeday.me/bug/20190529/1179407.html
總結
以上是生活随笔為你收集整理的java top.dialog控件,java – 如何只为他的父级创建JDialog onTop?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FusionChart完全入门手册 -2
- 下一篇: nginx+PHP+PHP-FPM(Fa