2014-03-29 17 views
0

我已經用JDesktopPane和幾個JButton創建了一個簡單的用戶界面。該程序的工作原理是,當單擊按鈕時,JInternalFrame加載並禁用該按鈕以防止創建內部框架的副本。 JInternalFrame上的Cancel按鈕關閉框架,並再次啓用JButton。我的代碼如下:JButton在關閉時不能重新啓用JInternalFrame

adminAddUser addNew = new adminAddUser(); 
private javax.swing.JButton newUserButton; 

private void newUserButtonActionPerformed(java.awt.event.ActionEvent evt) 
{            
    AdminPane.add(addNew); 
    addNew.setVisible(true); 
    newUserButton.setEnabled(false); 
} 

adminAddUser類的Cancel按鈕的Action Listener。 dispose()方法用於關閉JInternalFrame。

private void cancelActionPerformed(java.awt.event.ActionEvent evt) {          
    int option; 

    option = JOptionPane.showConfirmDialog(rootPane, "Cancel?", "", JOptionPane.YES_NO_OPTION); 

    switch(option) 
    { 
     case (JOptionPane.YES_OPTION): 
      dispose(); 
      break; 

     case (JOptionPane.NO_OPTION): 
      break; 

     default: 
      break; 
    } 
}       

最後,我的處理代碼在內部框架關閉時重新啓用JButton。

private void AdminPaneComponentRemoved(java.awt.event.ContainerEvent evt) {           
    if(evt.getChild() == addNew) 
    { 
     newUserButton.setEnabled(true); 
    } 
}  

按鈕重新啓用精細點擊直接在JInternalFrame默認的關閉按鈕時,但取消按鈕只能用一次,並在嘗試使用它第二次,JInternalFrame的關閉,但將JButton不重新啓用。我如何重新啓用它?

任何幫助將不勝感激,因爲我是新的GUI編碼的Java。

+0

實例爲什麼你使用選項窗格這麼freaquently?自己創建對話框。 –

回答

1

這是一個可能的解決方案。

  • 創建interface(我只能這樣做,因爲沒有不公開的主要JFrame)。有JFrame窗體類實現它。它只會有一個方法getNewUserButtont();

    public interface GetButtonInterface { 
        JButton getUserButton(); 
    } 
    
    public NewJFrame extends JFrame implements GetButtonInterface { 
        private JButton newUserButton; 
    
        @Override 
        JButton getUserButton() { 
         return newUserButton; 
        } 
    } 
    
  • 然後在您的JInternaFrame類,它應該在構造一個GetButtonInterface ARG。這樣,您可以訪問到newUserButton

    public AdminAddUser extends JInternalFrame { 
        private JButton newUserButton; 
    
        public AdminAddUser(GetButtonInterface gbi) { 
         newUserButton = gbi.getUserButton(); 
        } 
    } 
    
  • 現在你可以做你想要的是什麼按鈕。每個新的AdminAddUser將使用newUserButton的相同實例。因此,您可以1.使用InternalFrameListener並覆蓋internalFrameClosing()以在窗口關閉時啓用按鈕。 2.當你實例化一個新的AdminAddUser使用通NewJFrame.this它使用按鈕爲cancelButtonActionPerrfomed

    public AdminAddUser extends JInternalFrame { 
        private JButton newUserButton; 
    
        public AdminAddUser(GetButtonInterface gbi) { 
         newUserButton = gbi.getUserButton(); 
    
         addInternalFrameListener(new InternalFrameAdapter(){ 
          @Override 
          public void internalFrameClosing(InternalFrameEvent e) { 
           newUserButton.setEnabled(true); 
          } 
         }); 
        } 
    
        private void cancelButtonActionPerformed(ActionEvent e) { 
         dispose(); 
         newUserButton.setEnabled(true); 
        } 
    } 
    
  • 。這是GetButtonInterface

    AdminAddUser addNew = new AdminAddUser(NewJFrame.this); 
    
0

我不明白。在我看來,adminAddUser只創建一次。在這種情況下,您不應該使用dispose,因爲該對象將被銷燬並且無法重新使用。

相關問題