2016-07-12 10 views
1

モードレスJDialogのいくつかの情報とともに表示したいメッセージがあります。親クラスは、disposeメソッドを呼び出して、正しいポイントでそれを閉じます。ここで私が持っているコードは次のとおりです。JDialogモダリティの振る舞い

private static void waitMessage() { 
    JOptionPane msg=new JOptionPane("Trying to get probes. Please wait ...", 
      JOptionPane.INFORMATION_MESSAGE,JOptionPane.DEFAULT_OPTION, 
      null,new Object[]{},null); 
    waitDialog=msg.createDialog("Probe Scan"); 
    waitDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
    waitDialog.setModalityType(ModalityType.MODELESS); 
    waitDialog.setSize(300,100); 
    waitDialog.setVisible(true); 
} 

問題は、私はModalityType.DOCUMENT_MODALを設定すると、期待どおりメッセージが表示されることです。もちろん、私が必要とするものではないJDialogブロック。

Incorrect Pane

はJDialogのはブロックされませんが、メッセージ・テキストが表示されない:私はModalityType.MODELESSを設定するとき

Correct Pane

しかし、私はこれを取得します。 ModalityTypeがなぜペインを覆っているのか誰かが説明できますか? TIA。

+0

私のenvでこの問題は表示されません – SomeDude

+0

ただ興味があります:ダイアログのサイズを変更すると正しく表示されますか? – Marco13

+0

いいえ、サイズ変更は関係ありません。 –

答えて

1

手動でJOptionPaneJDialogのコンテンツとして追加すると、私には正しく表示されません。

waitDialog = msg.createDialog("Probe Scan"); 
+0

私がした検索からその方法を選んだ。私はあなたに試してみましょう。ありがとう。 –

+0

これ以上見ると、これは私が必要とすることをしないと思う。私はこれを作成する方法を見ることができないので、ユーザーはそれを閉じることができません。 'SetDefaultCloseOperation'メソッドはありません。私はまた、どのようにプログラムを閉じて、 "dispose"メソッドを持っていないかのように見えません。何か不足していますか? –

+0

作成されたダイアログには、他のJDialogと同じメソッドがあります。たとえば、setDefraultCloseOperationなどの例で行ったように呼び出すことができます。 – Berger

0

あなたがプログラムでダイアログを閉じることができない理由は、ダイアログへの参照を保持していないということです。

JOptionPaneので、より良いことをしようと、関連するJDialogインスタンスを作成するために設計されたmethodを持っています。これを行う1つの方法は、waitMessage()メソッドがwaitDialogインスタンスを返すようにすることです。 @Bergerが示唆するようにすることもできます。

また、

waitDialog.setSize(300,100); 
waitDialog.setVisible(true); 
waitDialog.pack(); 

はなぜ((のsetSizeを呼び出し)ともパック)?あなたの心を作りましょう - あなたはそれを特定のサイズにしたいですか、それとも好みのサイズにしたいですか? setSizeまたはpackのいずれかを呼び出した後にsetVisible()を呼び出す必要があります。

'SetDefaultCloseOperation'メソッドはありません。

ただし、setDefaultCloseOperationメソッドがあります。 (小文字の最初の手紙に注意してください)

+0

私はこの問題の原因について考えています。このメソッドの親がOKボタンでJOptionPaneを作成すると、このペインが変更されて正しく表示されます。これは、私がモードレス時にある種のタイミング問題があることを暗示していませんか? –