当另一个对话框打开时,不返回到对话框



我显示了一个来自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你可以传递一个WindowDialog的构造函数,它被允许是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标志提供了更多的控制。

相关内容

  • 没有找到相关文章

最新更新