2012-07-20 128 views
1

我在創建NetBeans平臺應用程序。當用戶點擊主窗口的X時,我希望應用程序不執行任何操作並顯示密碼JDialog。如果密碼正確,請關閉應用程序,否則請不要關閉應用程序。我該怎麼做呢?我創建了一個顯示密碼JDialog的Listener類,但是如何阻止應用程序關閉?與JFrame的setDefaultCloseOperation類似,並將其設置爲關閉時不執行任何操作。NetBeans平臺無法關閉

public class Listener extends WindowAdapter { 

     private Frame frame; 

     @Override 
     public void windowActivated(WindowEvent event) { 
      frame = WindowManager.getDefault().getMainWindow(); 
      frame.setSize(946, 768); 
     } 

     @Override 
     public void windowClosing(WindowEvent event) { 
      ShutDownMainWindowJDialog shutDownMainWindowJDialog; 
      shutDownMainWindowJDialog = new ShutDownMainWindowJDialog(null, true); 
      shutDownMainWindowJDialog.exeShutDownMainWindowJDialog(); 
      shutDownMainWindowJDialog.setLocationRelativeTo(frame); 
      shutDownMainWindowJDialog.setVisible(true); 
     } 
    } 

public class Installer extends ModuleInstall { 

    @Override 
    public void restored() { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       Frame frame = WindowManager.getDefault().getMainWindow(); 
       frame.addWindowListener(new Listener()); 
      } 
     }); 
    } 
} 
+1

爲什麼不直接使用一個JFrame? – 2012-07-20 15:50:44

+0

如何? JFrame someJFrame = WindowManager.getDefault()。getMainWindow();給我一個錯誤 – jadrijan 2012-07-20 15:53:28

+0

創建一個新的JFrame?哈哈。 'JFrame frame = new JFrame();'但是我的答案如下,如果你致力於使用一個'Frame'。你可以有一個擴展'JFrame'的類並將它用於你的主窗口。 – 2012-07-20 15:55:28

回答

4

這很容易。所以創建模塊與安裝程序和覆蓋方法關閉(可以),然後顯示您的對話框並返回false(不關閉應用程序)。爾卡

因此,這是結論: 添加到您的模塊安裝/激活

package master; 

import org.openide.modules.ModuleInstall; 

/** 
* Manages a module's lifecycle. Remember that an installer is optional and 
* often not needed at all. 
*/ 

public class Installer extends ModuleInstall { 

@Override 
public void close() { 
    //your module shutdown 
} 

@Override 
public boolean closing() { 

// this is place for your Dialog() and return: 
// 
//  true if you want to enable close the app 
//  other return false 
/* 
if you force shutdown app try LifecycleManager.getDefault().exit(); 
System.exit(0) is very dummy, because it does not respect betweenmodule dependencyis 

} 
} 

爾卡

+0

我在一個月前計算出了這一點,但無論如何感謝您的回答,我非常感謝您的幫助。 – jadrijan 2012-10-16 13:54:01

-1

在你windowClosing()獲取用戶和dispose()框架中的密碼是否正確。

public class PasswordToClose extends WindowAdapter { 

    private JFrame frame; 

    public PasswordToClose(JFrame frame) { 
    this.frame = frame; 
    } 

    public static void main(String[] args) { 
    JFrame frame = new JFrame("Password to close"); 
    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 

    frame.addWindowListener(new PasswordToClose(frame)); 
    frame.setSize(200, 200); 
    frame.setVisible(true); 
    } 

    @Override 
    public void windowClosing(WindowEvent evt) { 
    String password = JOptionPane.showInputDialog(frame, "Enter password"); 
    if ("secret".equals(password)) { 
     frame.dispose(); 
    } 
    } 
} 
+0

他聲稱他不能使用JFrame,我已經建議他只使用JFrame和它的setDefaultClose,但他不喜歡它。 – 2012-07-20 16:19:03

+0

你好,我想,關於windowClosing的思考並不好,因爲NB是基於模塊系統的框架。只要一個模塊用於「關閉動作」;-)簡單使用overwride關閉或關閉。 Jirka – user1722245 2012-10-16 22:13:48