我显示了一个来自JFrame的对话框,但是当我在对话框外单击时,对话框被隐藏了。对话框应该不会让你做任何事除非你关闭它,对吗?
这是我的代码:
从第一个对话框调用的对话:
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好吗?或者我做错了什么?
你正在寻找的行为被称为"模态"对话框。你必须将'true'传递给对话框构造函数:
public JProductStocking() {
super((Frame)null, true); //better to pass an actual Frame, Window or Dialog object as a parent
initComponents();
}
您没有将父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
标志提供了更多的控制。