2010-12-28 8 views
5

JOptionPaneの静的メソッド(showMessageDialogなど)の1つによって作成された(JDialog?)オブジェクトへの参照を保持することは可能でしょうか?画面上にダイアログが現れる位置を変更しようと考えています。具体的には、デフォルトでウィンドウの中心ではなく、メインのアプリケーションウィンドウの左上隅にダイアログが表示されるようにします。したがって、オブジェクトへの参照を持つことで、私はsetLocationを使用して目的の効果を達成することができます。JOptionPane静的メソッドによって作成されたオブジェクトへの参照を取得する

何か提案がありがとうございます!ありがとう!

答えて

7

静的showXXXDialog()方法は単に便宜のためのものです。 JOptionPaneのソースコードを見ると、実際には指定したオプションに基づいてJOptionPaneオブジェクトが作成され、次にJOptionPane.createDialog(...)が呼び出されます。異なる位置にあなたのメッセージダイアログを表示する一つの方法は次のとおりです。あなたは、静的メソッドで行われていた何かを行うことができ、

JOptionPane pane = new JOptionPane("Message", JOptionPane.WARNING_MESSAGE, 
     JOptionPane.DEFAULT_OPTION); 
JDialog dialog = pane.createDialog("TITLE"); 
dialog.setLocation(0, 0); 
dialog.setVisible(true); 

// dialog box shown here 

dialog.dispose(); 
Object selection = pane.getValue(); 
JOptionPaneコンストラクタのパラメータの組み合わせで

、およびJOptionPane setメソッド、プラスますオブジェクトJDialogにアクセスできます。

EDITED:(OPの入力ダイアログの例を追加する)

JOptionPane pane = new JOptionPane("Message", JOptionPane.QUESTION_MESSAGE, 
     JOptionPane.OK_CANCEL_OPTION, null, null, null); 
pane.setWantsInput(true); 
JDialog dialog = pane.createDialog(null, "Title"); 
dialog.setLocation(0, 0); 
dialog.setVisible(true); 

String str = (String) pane.getInputValue(); 
+0

クール、私はなどshowMessageDialog、showConfirmDialogで、に上記を適用する方法を見てしかし、何showInputDialogの実装に関することができますか? JDialogで入力テキストフィールドを実装するにはどうすればよいですか? – skyork

+0

@ user548240 - inputDialogの例を –

+0

追加しました。私はゼロから構築することを考えていましたが、JOptionPaneですぐに利用できるメソッドがあるかどうかはわかりませんでした。ありがとう! – skyork

0

のJOptionPaneます(javax.swing.JOptionPane.showMessageDialog(コンポーネント、オブジェクト)に例えば)ダイアログを中央に場所を決定するために与えられたparentComponent(最初のメソッドのパラメータ)を使用

あなたが渡すしようとすることができこのように、例えば、別の場所にダイアログを配置偽成分:

JFrame frame = new JFrame("Test"); 
    frame.setLocation(100, 100); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

    // 'Invisible' fake component for positioning 
    JWindow c = new JWindow(); 
    c.setSize(0, 0); 
    c.setVisible(true); 
    Point location = frame.getLocation(); 
    location.translate(200, 100); 
    c.setLocation(location); 

    JOptionPane.showInputDialog(c,"Foo"); 
関連する問題