2009-01-13 90 views
11

我目前對我的擺動提醒應用程序有問題,它可以最小化到關閉的托盤。我的問題是,我需要JOptionPane對話框根據我設置的時間彈出,但這裏的問題是,當我最小化它時,對話框將彈出,但不會在窗口的頂部時,其他應用程序如explorer,firefox正在運行,任何人都知道如何彈出窗口頂部的對話框,無論應用程序正在運行?JOptionPane不會在其他窗口上顯示它的對話框

回答

3

自XP以來,Windows正在阻止此操作。

之前的情況是這樣的: 您在編輯器中的某些文本中發出提示,並且在您翻閱文本時無法識別出另一個對話正在到達前面。即將到來的對話獲得焦點,並且您正在新的對話框中進行提示。也許你準備好後點擊回車,然後在錯誤的對話框中執行此操作,這是詢問你是否真的想刪除你的硬盤;)

java中的前來調用只適用於java窗口。

通知用戶一個新窗口的可能性是實現一個框架,該框架將在Windows任務欄中突出顯示/閃爍。

+0

擴大評論,這是非常好的。使用擴展JFrame的東西,而不是擴展JDialog的某些東西,以便在調用前端時使任務欄中的內容閃爍 – 2009-01-13 13:48:28

1

您可能會考慮改用JFrame。它可能會給你更多的靈活性。

如果您正在使用一個JFrame,你希望它在其它窗口上方彈出使用:

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

的的setState將顯示窗口,用戶如果是在最小化狀態之前。

4

您是否正在使用一個罐裝的JOptionPanes? (像JOptionPane.showCOnfirmDialog(...))

您可能想要看看擴展JDialog並製作自己的對話框面板,然後調用myDialog.setAlwaysOnTop(true);

3

糾正上面的帖子..

我有如下解決我的問題:

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

它工作正常,我:)

10

創建一個空的分別啞的JFrame,將其設置始終並將其用作JOptionPane的組件,而不是null。所以JOptionPane總是保持在應用程序的所有其他窗口上。您還可以確定JOptionPane在屏幕上的位置與虛擬JFrame的位置。

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(); 
} 
5

舊帖子,但我一直在爲此而苦苦掙扎。

我的問題是Javafx允許JOptionPane超越當前Java窗口。

因此,我使用了以下方法,將JOptionPane放置在所有窗口的前方,從而完成原始海報的要求。甚至是JAVAFX。

首先老的JOptionPane:

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

而這裏好玩的是一切都在一個長行:

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

現在停留在前方的JOptionPane

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

你可以創建一個靜態方法,在那裏爲你返回JDialog,然後在JOptionPan中調用它e清理你的代碼。

相關問題