- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
比方说,我们有几个同时可见的 JFrame
窗口,并且每个窗口都会出现 JDialog
。当我们的窗口处于级联模式并且对话框 setAlwaysOnTop
为 true
时,所有对话框都将在最后一个窗口上可见。
我只想将一个 Dialog 组件与其所有者相关联,这样当您在 Frames 之间切换时,您只会在顶部看到一个对话框,并且在单击一个框架时不会丢失该对话框。
对话框有这样的构造器:
setAlwaysOnTop(true);
setModal(false);
提前致谢!
最佳答案
How to make JDialog onTop only for his parent?
必须使用 setModalityType
f.e. ModalityType.DOCUMENT_MODAL
ModalityType.APPLICATION_MODAL
代替 setModal
setModal
对 initialized
的容器有效/是父级
这个 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 - 如何只为他的 parent 制作 JDialog onTop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15134361/
想象一下,我有一个巨大的主题和帖子数据库(大约 10.000.000 条记录),来自不同的论坛站点,包括用作我的 lucene 文档的几个子论坛。 现在,我正在尝试根据其中使用的术语为每个帖子计算一个
比方说,我们有几个同时可见的 JFrame 窗口,并且每个窗口都会出现 JDialog。当我们的窗口处于级联模式并且对话框 setAlwaysOnTop 为 true 时,所有对话框都将在最后一个窗口
好吧,如果我们有 onToped JFrame this.setAlwaysOnTop(true); 然后打开JDialog private void colorChooseMenuItemActio
我有一个从野牛(解析器)生成的控制台应用程序,我想为它构建一个简单的 gui 所以我可以将输入从这个 gui 发送到控制台,并将控制台的输出发送到 gui 中。 我尝试使用 java 进程类来做到这一
我是一名优秀的程序员,十分优秀!