2014-10-01 18 views
1

我的程序是使用Eclipse編寫的Java程序,我的程序首先必須將您的用戶名和密碼登錄到服務器,一旦驗證完畢,然後轉到一個新頁面(框架),在該頁面中有一個JMenuBar, JMenu和JMenuItem。我正在使用的JMenuItem在JMenu Exit下稱爲「註銷」,當您點擊註銷時,它將關閉屏幕。我想要發生的事情是將我重定向回登錄頁面。我嘗試了很多功能,但都沒有工作。我將不勝感激。如何返回到我的登錄屏幕?

這裏是我的程序:

public class ScanTest2 extends JFrame { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private static LoginDialog loginDialog; 

public ScanTest2() { 
    loginDialog = new LoginDialog(this, true); 
    loginDialog.setVisible(true); 
} 

public static void main(String[] args) 
{ 
    SwingUtilities.invokeLater(new Runnable() 
    { 

     public void run() 
     { 
      // create new frame for new page 
      JFrame frame = new ScanTest2(); 

      //create a Menu bar 
      JMenuBar menuBar = new JMenuBar(); 

      frame.getContentPane().setBackground(Color.BLUE); 
      try { 
       frame.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("/home/a002384/logo2.bmp"))))); 

      } catch (IOException e) { 

       e.printStackTrace(); 
      } 
      frame.setTitle("Scan Gun Information"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setLocationRelativeTo(null); 
      frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

      // create Menus 
      JMenu databaseMenu = new JMenu("Database"); 
      JMenu ticketMenu = new JMenu("Tickets"); 
      JMenu inquiriesMenu = new JMenu("Inquiries"); 
      JMenu reportsMenu = new JMenu("Reports"); 
      JMenu exitMenu = new JMenu("Exit"); 

      // create Menu Items 
      JMenuItem lotMenuItem = new JMenuItem("Lots"); 
       lotMenuItem.setMnemonic(KeyEvent.VK_L); 
       lotMenuItem.setActionCommand("Lots"); 
      JMenuItem gunMenuItem = new JMenuItem("Guns"); 
       gunMenuItem.setMnemonic(KeyEvent.VK_G); 
       gunMenuItem.setActionCommand("Guns"); 
      JMenuItem batteryMenuItem = new JMenuItem("Batteries"); 
       batteryMenuItem.setMnemonic(KeyEvent.VK_B); 
       batteryMenuItem.setActionCommand("Batteries"); 
      JMenuItem logoutMenuItem = new JMenuItem("Logout"); 
       logoutMenuItem.setMnemonic(KeyEvent.VK_L); 
       logoutMenuItem.setActionCommand("Logout"); 


      MenuItemListener menuItemListener = new MenuItemListener(); 
      lotMenuItem.addActionListener(menuItemListener); 
      gunMenuItem.addActionListener(menuItemListener); 
      batteryMenuItem.addActionListener(menuItemListener); 
      logoutMenuItem.addActionListener(menuItemListener); 

      // add Menu Items to Menus 
      databaseMenu.add(lotMenuItem); 
      databaseMenu.add(gunMenuItem); 
      databaseMenu.add(batteryMenuItem); 
      exitMenu.add(logoutMenuItem); 

      // add menu to MenuBar 
      menuBar.add(databaseMenu); 
      menuBar.add(ticketMenu); 
      menuBar.add(inquiriesMenu); 
      menuBar.add(reportsMenu); 
      menuBar.add(exitMenu); 

      frame.setJMenuBar(menuBar); 
      frame.setVisible(true); 

     } // end of run method 

     class MenuItemListener implements ActionListener { 

      public void actionPerformed(ActionEvent e) { 
       String command = e.getActionCommand(); 
       if (command.equals("Logout")) 
        System.exit(0); 
        // go back to login screen 

      } 
     } 
    }); // end of Runnable 
}// end of Main 
} 

class LoginDialog extends JDialog { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

private final JLabel loginlbl = new JLabel("Username"); 
private final JLabel Passwordlbl = new JLabel("Password"); 

private final JTextField loginName = new JTextField(15); 
private final JPasswordField loginPassword = new JPasswordField(); 

private final JButton loginButton = new JButton("Login"); 
private final JButton cancelButton = new JButton("Cancel"); 

private final JLabel Status = new JLabel(" "); 

private String username; 
private String password; 

private int m_errCounter = 0; 

public static final int MAX_LOGIN_ATTEMPTS = 3; 

public LoginDialog() { 
    this(null, true); 
} 

public LoginDialog(final JFrame parent, boolean modal) { 
    super(parent, modal); 

    JPanel p3 = new JPanel(new GridLayout(2, 1)); 
    p3.add(loginlbl); 
    p3.add(Passwordlbl); 

    JPanel p4 = new JPanel(new GridLayout(2, 1)); 
    p4.add(loginName); 
    p4.add(loginPassword); 

    JPanel p1 = new JPanel(); 
    p1.add(p3); 
    p1.add(p4); 

    JPanel p2 = new JPanel(); 
    p2.add(loginButton); 
    p2.add(cancelButton); 

    JPanel p5 = new JPanel(new BorderLayout()); 
    p5.add(p2, BorderLayout.CENTER); 
    p5.add(Status, BorderLayout.NORTH); 
    Status.setForeground(Color.RED); 
    Status.setHorizontalAlignment(SwingConstants.CENTER); 

    setLayout(new BorderLayout()); 
    add(p1, BorderLayout.CENTER); 
    add(p5, BorderLayout.SOUTH); 
    pack(); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

    loginPassword.enableInputMethods(true); 

    addWindowListener(new WindowAdapter() { 

     public void windowClosing(WindowEvent e) { 
      System.exit(0); 
     } 
    }); 

    loginButton.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 

      UniJava uJava = new UniJava(); 
      try { 
        username = loginName.getText(); 
        password = new String (loginPassword.getPassword()); 
        if (username == " " && password == " ") 
        { 
         Status.setText("Invalid username or password!"); 
        } 
        else 
        { 
         UniSession session = uJava.openSession(); 
         session.setHostName("docdbtst.starcalif.com"); 
         session.setUserName(username); 
         session.setPassword(password); 
         session.setAccountPath("/mnt/data1/DD"); 
         session.connect(); 
         parent.setVisible(true); 
         setVisible(false); 
        } 

      } catch (UniSessionException e1) { 

       if (++m_errCounter > MAX_LOGIN_ATTEMPTS) 
       { 
        JOptionPane.showMessageDialog(LoginDialog.this, 
          "All Login attempts failed!", 
          "Error", JOptionPane.ERROR_MESSAGE); 
        System.exit(1); 
       } 
       else 
       { 
        Status.setText("Invalid Login! Cannot Connect!"); 
        loginName.setText(""); 
        loginPassword.setText(""); 
       } 

       e1.printStackTrace(); 
      } 

     } 
    }); 
    cancelButton.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      setVisible(false); 
      parent.dispose(); 
      System.exit(0); 
     } 
    }); 
    } 
} 
+0

從我所看到的,後登錄成功,你設置'調用setVisible(假)'上登錄對話框,這意味着它仍然在後臺,只是看不見。如果是這種情況,當你想返回到「頁面」時,只需使用'setVisible(true)'。請注意,這將保留對話框的狀態,因爲它沒有被重新創建,只是重新顯示。 – user1803551 2014-10-01 17:55:20

+0

一旦憑證已經過驗證,我就會棄用登錄的JPanel,而不是僅僅隱藏它。從技術上講是一個安全問題在註銷時實例化一個新的是我推薦的操作過程。 – Compass 2014-10-01 18:18:51

+0

@Compass我應該如何去那條路? – 2014-10-01 18:33:34

回答

3

System.exit()一切都將被清理 JFrame.dispose() vs System.exit()

logoutItem.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      f.dispose(); 
      // northInformation.removeAll(); 
      // init(); 
      LoginWindow login = new LoginWindow(); 
     } 
    }); 
+0

我應該如何在我的程序中執行此操作? – 2014-10-01 18:34:52

+2

將'System.exit(0)'更改爲'f.dispose()',f是您要關閉的窗口。 – 2014-10-01 18:37:24

+0

謝謝!這有幫助! – 2014-10-01 20:44:01