5

JOptionPaneの静的メソッドの1つ(showMessageDialogなど)によって作成された(JDialog?)オブジェクトへの参照を取得できるかどうか疑問に思います。ダイアログが画面に表示される位置を変更するつもりです。具体的には、デフォルトでウィンドウの中央ではなく、メインのアプリウィンドウの左上隅にダイアログを表示したいと思います。したがって、オブジェクトへの参照があると、setLocationを使用して目的の効果を実現できます...

任意の提案をいただければ幸いです!ありがとう!

4

2 に答える 2

7

静的showXXXDialog()メソッドは便宜上のものです。のソースコードを見ると、実際には、指定したオプションに基づいてオブジェクトが作成され、呼び出されJOptionPaneていることがわかります。メッセージダイアログを別の位置に表示する1つの方法は次のとおりです。JOptionPaneJOptionPane.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コンストラクターへのパラメーターとJOptionPanesetメソッドを組み合わせることで、静的メソッドで行ったであろうすべてのことを実行でき、さらにJDialogオブジェクト自体にアクセスできます。

編集:(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();
于 2010-12-28T01:44:56.220 に答える
0

JOptionPaneは、指定されたparentComponent(最初のメソッドパラメーター)を使用して、ダイアログを中央に配置する場所を決定します(たとえば、javax.swing.JOptionPane.showMessageDialog(Component、Object))

たとえば、次のように、ダイアログを別の場所に配置する偽のコンポーネントを渡そうとすることができます。

    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");
于 2010-12-28T00:58:54.510 に答える