2013-06-27 2 views
-1

Так что это мой код:Закрыть Внутреннюю рамку после определенной задачи

public class DesktopFrame extends JFrame{ 
    private JDesktopPane theDesktop; 
    private JInternalFrame login; 
    private JMenuBar bar; 
    private JMenu fileMenu; 
    private JMenuItem newLoginFrame; 
    private LoginPanel panel; 

    // set up GUI 
    public DesktopFrame(){ 
     super("Application"); 
     bar = new JMenuBar(); // create menu bar 
     bar.setBackground(new Color(255,215,0)); 
     fileMenu = new JMenu("File"); // create Add menu 
     fileMenu.setBackground(new Color(255,215,0)); 
     newLoginFrame = new JMenuItem("Login"); 
     newLoginFrame.setBackground(new Color(255,215,0)); 
     fileMenu.add(newLoginFrame); // add new frame item to Add menu 
     bar.add(fileMenu); // add Add menu to menu bar 
     setJMenuBar(bar); // set menu bar for this application 
     theDesktop = new JDesktopPane(); // create desktop pane 
     theDesktop.setBackground(Color.BLUE); 
     add(theDesktop); // add desktop pane to frame 
     // set up listener for newLoginFrame menu item 
     newLoginFrame.addActionListener(new ActionListener(){ // anonymous inner class 
      // display new internal window 
      public void actionPerformed(ActionEvent event){ 
       login = new JInternalFrame("Member Login", false, false, false, false); 
       panel = new LoginPanel(); 
       login.add(panel, BorderLayout.CENTER); // add panel 
       login.setSize(375,300); 
       login.setLocation(20,20); 
       theDesktop.add(login); // attach internal frame 
       login.setVisible(true); // show internal frame 
      } // end method actionPerformed 
     } // end anonymous inner class); // end call to addActionListener 
    } // end DesktopFrame constructor 

    public void getValid(){ 
     if(panel.getValid() == true){ 
      try{ 
       login.setClosed(true); 
      } 
      catch(PropertyVetoException p){  
      } 
     } 
    } 
} // end class DesktopFrame 

В этом документе есть и другой класс «LoginPanel», который обрабатывает весь вход в кадре. Если имя пользователя/пароль работает, он создает логическую переменную «valid», которая истинна. Я назвал его «panel.getValid()». Как вы видите, цель состоит в том, чтобы выйти из фрейма входа, когда «valid» имеет значение true. Это возможно? Что рекомендуют люди? Прямо сейчас, когда «setClosed» выходит из всего кадра, а не только внутреннего фрейма «Вход». Я не знаю почему

+2

1) Не выдвигайте рамки или другие контейнеры верхнего уровня. Вместо этого создайте & используйте экземпляр одного. 2) Используйте последовательный и логический отступ для кодовых блоков. Отступ кода предназначен для того, чтобы помочь людям понять поток программы. 3) За более эффективную помощь отправьте сообщение по адресу [SSCCE] (http://sscce.org/). –

ответ

1

Я думаю, что лучше создать JDialog для входа (для документа JDialog см. this link), работать с ним так же, как с внутренним фреймом. После успешного входа в систему dispose() в JDialog.

This question and answers должно быть полезно.

+0

гений спасибо – user2518777

+0

@ user2518777 если это ваше предварительное решение, вы можете принять ответ – 1ac0

+0

+1 ... @ user2518777 Также см. [This] (http://stackoverflow.com/questions/13055107/joptionpane-check-user-input- и-prevent-from-clos-until-conditions-are-met/13055405 # 13055405), который использует 'JDialog' для проверки ввода. –