0

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をうまく呼び出していませんか?または何が間違っていますか?

4

2 に答える 2

3

探している動作は、「モーダル」ダイアログと呼ばれます。ダイアログ コンストラクターに「true」を渡す必要があります。

public JProductStocking() {
        super((Frame)null, true); //better to pass an actual Frame, Window or Dialog object as a parent
        initComponents();

    }
于 2014-05-15T09:47:51.337 に答える
2

Windowのコンストラクターに親とmodalフラグを渡さなかったJDialogため、モードレスのデフォルトの動作が使用されました。あなたのコードは不必要に複雑であることに注意してください。

Java 6以降、WindowaDialogのコンストラクターに a を渡すことができ、それが許可されている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を構成できることに注意してください。これにより、単純なフラグよりもはるかに多くの制御が提供されます。DialogAPPLICATION_MODALDOCUMENT_MODALmodal

于 2014-05-15T11:01:33.533 に答える