Mam 2 formy, jedna to okno (JDialog) wyskakujące z drugiego i w zależności od wpisanych danych (danych logowania) wyświetlające różne widoki. Niestety po wciśnięciu przycisku zaloguj obiekt klasy LoginFactory (singleton) dalej zwraca starą wartość (metoda logedIn). Ktoś ma jakiś pomysł jak to naprawić?
LoginDialogForm

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package computershopandservice.forms;

import computershopandservice.LoginFactory;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;

/**
 *
 * @author xyz
 */
public class LoginDialogForm extends JDialog implements ActionListener{
    
        public LoginDialogForm()
        {
            this("Zalogu do systemu", null, true);
        }
    
    
        public LoginDialogForm(String title, Frame parentFrame, boolean modal) {
        super(parentFrame, title, modal);
        
        this.parentFrame = parentFrame;
        initComponents();
        componentListeners();
        setModal(true);
        }
        
        private void initComponents()
        {
        setLayout(new MigLayout());
        mainpane = new JPanel(new MigLayout());
        buttonpane = new JPanel(new MigLayout());
        loginField = new JTextField(20);
        passwordField = new JPasswordField(20);
        loginLabel = new JLabel("Login");
        passwordLabel = new JLabel("Hasło");
        mainpane.add(loginLabel, "gap para");
        mainpane.add(loginField, "wrap");
        mainpane.add(passwordLabel, "gap para");
        mainpane.add(passwordField, "wrap");
        loginButton = new JButton("Login");
        exitButton = new JButton("Exit");
        buttonpane.add(loginButton, "w 30%, center");
        buttonpane.add(exitButton, "w 30%");
        setSize(350, 200);
        add(mainpane, "gap para, wrap");
        add(buttonpane, "center");
        setLocationRelativeTo(null);
        
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        pack();
        }
        
        public void startApp()
        {
            loginField.setText("");
            passwordField.setText("");
            this.parentFrame.setVisible(false);
            setVisible(true);
        }
        
    // Variables declarations
    private JPanel mainpane, 
                   buttonpane;
    private JButton loginButton;
    private JButton exitButton;
    private JTextField loginField;
    private JPasswordField passwordField;
    private JLabel loginLabel, passwordLabel;
    private Frame parentFrame;
    

    private void componentListeners() {
        exitButton.addActionListener(this);
        loginButton.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(exitButton)) {
            System.exit(0);
        }
        else if(e.getSource().equals(loginButton))
        {  
            LoginFactory.getInstance().loggedAs(loginField.toString(), null);

            this.dispose();
            parentFrame.setVisible(true);
        }
    }
    
    private void showInvalidLoginDialog()
    {
        JOptionPane.showMessageDialog(this, "Niewlasciwe dane logowania",
                "Błąd logowania", JOptionPane.WARNING_MESSAGE);
    }
    
    public int loggedAs()
    {
        return LoginFactory.getInstance().loggedIn();
    }
    
    
    
    
}

MainView (uruchamiane z głównego okna Javy)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package computershopandservice.forms;

import computershopandservice.LoginFactory;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import net.miginfocom.swing.MigLayout;

/**
 *
 * @author xyz
 */
public class MainView extends JFrame{

    public MainView() {
        initComponents();
    }

    private BasicTools basicToolsPanel;
    private LoginDialogForm loginForm;
    private JButton logoutButton;
    
    private ServicePanel servicePanel;
    private AdministrativePanel adminPanel;
    
    private void initComponents() {
        setLayout(new MigLayout("center"));
        logoutButton = new JButton("Wyloguj");
        basicToolsPanel = new BasicTools();
        loginForm = new LoginDialogForm("Zaloguj do systemu", this, true);
        
        loginForm.startApp();
        
        System.out.println(LoginFactory.getInstance().loggedIn());
        //setValidPanel();
//        servicePanel = new ServicePanel();
//        add(servicePanel, "wrap");
        add(basicToolsPanel, "wrap");
        add(logoutButton, "center");
        setPreferredSize(new Dimension(800, 600));
        
        pack();
        setLocationRelativeTo(null);
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    public void setValidPanel()
    {
        switch(loginForm.loggedAs()){
            case 1 : 
                       servicePanel = new ServicePanel();
                       add(servicePanel, "wrap");
                       break;
            case 2:    adminPanel = new AdministrativePanel();
                       add(adminPanel, "wrap");
                       break;
        }
        pack();
    }
    
    private void removeUnusedPanels()
    {
        
    }
 }

Oraz LoginFactory

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package computershopandservice;

/**
 *
 * @author xyz
 */
public class LoginFactory {
    
    private LoginFactory() {
    }
    
    public static LoginFactory getInstance() {
        return LoginFactoryHolder.INSTANCE;
    }
    
    private static class LoginFactoryHolder {

        private static final LoginFactory INSTANCE = new LoginFactory();
    }
    //
        private static int loginAsInt = -1;
    
    // 
    public String loggedAs(String login, String password)
    {
        if(login.equals("admin")) {
            loginAsInt = 2;
            return "Admin";
        }
        else if(login.equals("service"))
        {
            loginAsInt = 1;
            return "Service";
        }
        return null;
    }
    public int loggedIn()
    {
        return loginAsInt;
    }
}