1

I'm getting there step by step but have come across yet another hurdle.

The title is pretty self-explanatory, what I'm wondering is how would I be able to use the JButton "logout" with ActionListener to be able to swap the card in my main LoginScreen.class?

I've had a few whacks but to no avail. Also any tips on improving my coding and format are welcome. Thanks in advance.

Here's my code:

LoginScreen.class

 /*Login Screen class for allowing
multiple levels of access and security*/

//Imports library files
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;

//Creates a LoginScreen class that extends the JFrame library class
class LoginScreen extends JFrame {

    //Creates a swing components and CardLayout for organising JPanels
    JPanel cardScreen;
    JPanel screen = new JPanel();
    Image ProgramIcon = Toolkit.getDefaultToolkit().getImage("imageIco.png");
    ImageIcon logo = new ImageIcon ("Logo.png");
    JLabel icon = new JLabel(logo);
    JLabel username = new JLabel("Username");
    JLabel password = new JLabel("Password");
    JTextField user = new JTextField(18);
    JPasswordField pass = new JPasswordField(18);
    JButton login = new JButton("Login");
    JLabel errorInfo = new JLabel("");
    int WIDTH = 800;
    int HEIGHT = 500;
    int currentPanel = 1;

     public static void main(String[] args){
     //Sets the GUI (Look and Feel) to the NimROD theme
        try {UIManager.setLookAndFeel("com.nilo.plaf.nimrod.NimRODLookAndFeel");}
        catch (UnsupportedLookAndFeelException e){ JOptionPane.showMessageDialog(null, "GUI Load Error: Unsupported");}
        catch (ClassNotFoundException e) { JOptionPane.showMessageDialog(null, "GUI Load Error: NimROD Missing");} 
        catch (InstantiationException e) { JOptionPane.showMessageDialog(null, "GUI Load Error: Instantiation Missing");} 
        catch (IllegalAccessException e) { JOptionPane.showMessageDialog(null, "GUI Load Error: Illegal Access"); } 

    //Creates a new LoginScreen via the LoginScreen method
        LoginScreen LS = new LoginScreen();
    }

    public LoginScreen(){
    //Adds the JPanel to the JFrame and set the JFrame's properties
    //Sets the main JPanel to CardLayout platform and adds other JPanels it
        final CardLayout cardL = new CardLayout();
        cardScreen = new JPanel();
        cardScreen.setLayout(cardL);
        cardScreen.add(screen, "1");;
        BaseScreen base = new BaseScreen();
        cardScreen.add(base, "2");
        this.setIconImage(ProgramIcon);
        this.setTitle("Login");
        this.setSize(WIDTH,HEIGHT);
        this.setResizable(false);
        this.add(cardScreen);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

     //Place the components on the JPanel and set their absolute posistions
        screen.setLayout(null);
        screen.add(username);
        screen.add(password);
        screen.add(user);
        screen.add(pass);
        screen.add(login);
        screen.add(icon);
        Dimension iconSize = icon.getPreferredSize();
        Dimension usernameSize = username.getPreferredSize();
        Dimension passwordSize = password.getPreferredSize();
        Dimension loginSize = login.getPreferredSize();
        Dimension userSize = user.getPreferredSize();
        Dimension passSize = pass.getPreferredSize();
        username.setBounds(252,170,usernameSize.width,usernameSize.height);
        password.setBounds(495,170,passwordSize.width,passwordSize.height);
        user.setBounds(180,200,userSize.width,userSize.height);
        pass.setBounds(420,200,passSize.width,passSize.height);
        login.setBounds(375,250,loginSize.width,loginSize.height);
        icon.setBounds(250,50,iconSize.width,iconSize.height);

        this.setVisible(true);

        login.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent ae) { 

                //Checks if both the user and pass text fields are empty
                if((user.getText().equals("")) && (pass.getText().equals(""))){

                    //Displays an error in the form of a label and adds it to the JPanel
                    errorInfo.setText("Please enter username and password");
                    screen.add(errorInfo);
                    errorInfo.setForeground(Color.RED);
                    Dimension errorInfoSize = errorInfo.getPreferredSize();
                    errorInfo.setBounds(300,300,errorInfoSize.width,errorInfoSize.height);
                }

                if((user.getText().equals("admin"))&&(pass.getText().equals("password"))){
                    cardL.show(cardScreen,"2");
                }
            }
        }); 
    }
}

BaseScreen.class

//Basescreen class

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;


class BaseScreen extends JPanel{

    JPanel screen = this;
    JButton logout = new JButton("Logout");
    ImageIcon title = new ImageIcon("title.png");
    JLabel header = new JLabel(title);

    public BaseScreen(){

        screen.setLayout(null);
        screen.add(logout);
        screen.add(header);
        Dimension headerSize = header.getPreferredSize();
        Dimension logoutSize = logout.getPreferredSize();
        logout.setBounds(720,440,logoutSize.width,logoutSize.height);
        header.setBounds(0,0,headerSize.width,headerSize.height);
        screen.setVisible(true);
    }
}

If your'e wondering why I've gone through all the effort to separate out the JPanel into another class, this is because I want to use my BaseScreen class to be inherited by many other JPanel classes and add each one as a card so being able to use a JButton in one of the classes is vital for the structure of the program to work. Hopefully I haven't gone about this the complete wrong way and won't need an etire rewrite of the program.

-Zalx

mKorbel
  • 109,525
  • 20
  • 134
  • 319
Zalx
  • 49
  • 4
  • 3
    You may want to take a look at this [change card layout panel from another panel](http://stackoverflow.com/questions/6175899/how-to-change-card-layout-panels-from-another-panel). Basically it consists of making your card layout static so you can access and change that static card layout after making a temporary new "Screen" object inside the actionlistener for the button. – Chad Campbell Nov 14 '12 at 15:04
  • 3
    Hopefully this [answer](http://stackoverflow.com/a/13378672/1057230) of mine will help you in this direction :-) – nIcE cOw Nov 14 '12 at 16:05
  • 1
    Thankyou very much, all is working now, you're helps worked a dream! – Zalx Nov 15 '12 at 12:57

0 Answers0