13

現在、スイングリマインダーアプリケーションに問題があり、閉じるときにトレイを最小化できます。ここでの私の問題は、JOptionPaneダイアログが設定に従って時間通りにポップアップする必要があることですが、ここでの問題は、最小化するとダイアログがポップアップしますが、エクスプローラー、Firefoxなどの他のアプリケーションの場合、ウィンドウの上部には表示されません実行中の場合、実行中のアプリケーションに関係なく、ウィンドウの上にダイアログボックスをポップアップする方法を知っている人はいますか?

4

6 に答える 6

13

それぞれ空のダミー JFrame を作成し、常に最前面に設定して、null の代わりに JOptionPane のコンポーネントとして使用します。そのため、JOptionPane は常に、アプリケーションの他のすべてのウィンドウよりも上に表示されます。また、ダミーの JFrame の場所を使用して、JOptionPane が画面上のどこに表示されるかを判断することもできます。

JFrame frmOpt;  //dummy JFrame

private void question() {
    if (frmOpt == null) {
        frmOpt = new JFrame();
    }
    frmOpt.setVisible(true);
    frmOpt.setLocation(100, 100);
    frmOpt.setAlwaysOnTop(true);
    String[] options = {"delete", "hide", "break"};
    int response = JOptionPane.showOptionDialog(frmOpt, msg, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, "delete");
    if (response == JOptionPane.YES_OPTION) {
        removeRow();
    }
    frmOpt.dispose();
}
于 2013-03-24T22:24:53.270 に答える
10

古い投稿ですが、私はこれに苦労していました。

私の問題は、JOptionPaneが現在のJavaウィンドウの後ろに移動できるようにするJavafxに関するものでした。

したがって、すべてのウィンドウの前に JOptionPane を配置することで、元のポスターが要求したことを行う次のコードを使用しました。JAVAFXでさえ。

まず、古い JOptionPane:

JOptionPane.showMessageDialog(null, "Here I am");

JOptionPane が前面に表示されるようになりました。

final JDialog dialog = new JDialog();
dialog.setAlwaysOnTop(true);    
JOptionPane.showMessageDialog(dialog, "Here I am");

そして、お楽しみのために、すべてを 1 つの長い行にまとめました。

JOptionPane.showMessageDialog(
                 ((Supplier<JDialog>) () -> {final JDialog dialog = new JDialog(); dialog.setAlwaysOnTop(true); return dialog;}).get()
                 , "Here I am");

JDialog を返す静的メソッドを作成し、それを JOptionPane で呼び出すだけで、コードを少しクリーンアップできます。

于 2015-04-16T09:34:44.777 に答える
4

定型化された JOptionPanes のいずれかを使用していますか? (JOptionPane.showCONfirmDialog(...) のように)

JDialog を拡張して独自のダイアログ パネルを作成し、myDialog.setAlwaysOnTop(true); を呼び出すことを検討してください。

于 2009-01-14T20:02:37.333 に答える
3

上記の投稿を修正してください。

私は以下のように私の問題を解決しました:

this.setVisible(true); // show main frame
MyDialog dialog = New MyDialog(this, true); // show my custom dialog
dialog.setVisible(true);
this.setVisible(false);

それは私にとってはうまくいきます:)

于 2009-01-15T01:57:57.070 に答える
3

XP以降、Windowsはこの操作をブロックしています。

前のシナリオは次のようなものでした: エディタ内のテキストにヒントを与えたのに、テキストをヒントしているときに別のダイアログが前面に表示されていることに気づきませんでした。次のダイアログがフォーカスを取得し、新しいダイアログにチップを入れています。たぶん、準備ができてから Enter キーを押して、本当にハードディスクを削除するかどうかを尋ねる間違ったダイアログでこれを行ってしまうかもしれません ;)

Java での前面呼び出しは、Java ウィンドウでのみ機能します。

ユーザーに新しいウィンドウを通知する可能性は、ウィンドウのタスクバーで強調表示/点滅するフレームを実装することです。

于 2009-01-13T12:43:59.933 に答える
1

代わりに JFrame を使用することを検討してください。もう少し柔軟性が得られるかもしれません。

JFrame を使用していて、それを他のウィンドウの上にポップアップさせたい場合は、次を使用します。

myFrame.setVisible(true);
myFrame.setState(Frame.NORMAL);

以前に最小化された状態であった場合、setState はユーザーにウィンドウを表示します。

于 2009-01-14T19:40:10.687 に答える