我从JFrame中显示一个Dialog,但是当我在对话框外单击时,对话框会被隐藏。除非你关闭它,否则它应该让对话不会让你无所作为?
这是我的代码:
来自First Dialog的Dialog:
JProductStocking jps = JProductStocking.getProductStoking(JPanelTicket.this, oApp);
jps.setVisible(true);
这是JDIalog,名为:
public class JProductStocking extends javax.swing.JDialog implements BeanFactoryApp{
public JProductStocking(Component parent, boolean modal) {
//super(parent, modal);
initComponents();
}
public static JProductStocking getProductStoking(Component parent, AppView app) {
Window window = getWindow(parent);
JProductStocking myMsg;
if (window instanceof JFrame) {
myMsg = new JProductStocking((Frame) window, true);
} else {
myMsg = new JProductStocking((Dialog) window, true);
}
myMsg.init(app, parent);
myMsg.applyComponentOrientation(parent.getComponentOrientation());
return myMsg;
}
private static Window getWindow(Component parent) {
if (parent == null) {
return new JFrame();
} else if (parent instanceof JFrame || parent instanceof Dialog) {
return (Window) parent;
} else {
return getWindow(parent.getParent());
}
}
public void init(AppView app, Component parent) {
oApp = app;
// m_dlSales = (DataLogicSales) app.getBean("com.openbravo.pos.forms.DataLogicSales");
initComponents();
ProductList = new ArrayList();
this.setResizable(false);
setLocationRelativeTo(parent);
}
}
我没有好好调用jDialog?或者我做错了什么?
答案 0 :(得分:3)
您正在寻找的行为称为“模态”对话框。您必须将'true'传递给对话框构造函数:
public JProductStocking() {
super((Frame)null, true); //better to pass an actual Frame, Window or Dialog object as a parent
initComponents();
}
答案 1 :(得分:2)
您没有将父Window
和modal
标记传递给JDialog
的构造函数,因此使用了无模式的默认行为。请注意,除此之外,您的代码也不必复杂。
从Java 6开始,您可以将Window
传递给Dialog
的构造函数,并且允许它为null
,因此它是故障安全的。结合现有方法SwingUtilities.windowForComponent
,整个代码可能如下所示:
public class JProductStocking extends javax.swing.JDialog
implements BeanFactoryApp {
public JProductStocking(Component parent, Dialog.ModalityType modality) {
super(SwingUtilities.windowForComponent(parent), modality);
initComponents();
}
// …
请注意,使用Java 6 Dialog.ModalityType
,您可以配置Dialog
以阻止此对话框(APPLICATION_MODAL
)的子项以外的所有其他应用程序窗口,或阻止对话框的父项及其仅限儿童(DOCUMENT_MODAL
)。这提供了比简单modal
标志更多的控制。