Note that there are some explanatory texts on larger screens.

plurals
  1. POChange cards with a JButton from another class
    primarykey
    data
    text
    <p>I'm getting there step by step but have come across <strong>yet another hurdle</strong>.</p> <p>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?</p> <p>I've had a few whacks but to no avail. Also any tips on improving my coding and format are welcome. Thanks in advance.</p> <p>Here's my code:</p> <p>LoginScreen.class</p> <pre><code> /*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("")) &amp;&amp; (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"))&amp;&amp;(pass.getText().equals("password"))){ cardL.show(cardScreen,"2"); } } }); } } </code></pre> <p>BaseScreen.class</p> <pre><code>//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); } } </code></pre> <p>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.</p> <p><strong>-Zalx</strong></p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload