I am making a chat app and have a login page, but I want it to be that when you click login it opens the next page, but not in a new window. Should I be adding my objects from the frame (frame.add) or the panel(panel.add)? Here's my code.
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ChatWindowLogin extends JFrame implements WindowStateListener, ActionListener{
public Dimension ss;
public JButton login;
public JButton signup;
public JFrame frame;
public ChatWindowLogin() {
frame = new JFrame("EasyChat Alpha v0.1");
frame.addWindowStateListener(this);
login = new JButton("Login");
signup = new JButton("Sign Up");
JPanel mainPanel = new JPanel();
JPanel loginPanel = new JPanel();
Color lightblue = new Color(78, 159, 206);
Color darkblue = new Color(24, 40, 85);
Border emptyBorder = BorderFactory.createEmptyBorder();
ss = Toolkit.getDefaultToolkit().getScreenSize();
frame.setVisible(true);
frame.setLayout(null);
frame.setSize(800,450);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.getContentPane().setBackground(darkblue);
frame.getContentPane().add(login);
frame.getContentPane().add(signup);
frame.getContentPane().add(mainPanel);
login.setFont(new Font("HelveticaNeue", Font.BOLD, 20));
login.setBounds(ss.width / 2 - 200 / 2, ss.height / 2 - 100 / 2, 200, 65);
login.setBackground(lightblue);
login.setFocusPainted(false);
login.setBorder(emptyBorder);
signup.setFont(new Font("HelveticaNeue", Font.BOLD, 20));
signup.setBounds(ss.width / 2 - 200 / 2, ss.height / 2 + 90 - 100, 200, 65);
signup.setBackground(lightblue);
signup.setFocusPainted(false);
signup.setBorder(emptyBorder);
frame.add(loginPanel);
//mainPanel.setLayout(new BorderLayout());
//mainPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
}
@Override
public void windowStateChanged(WindowEvent e) {
Dimension ss = frame.getSize();
signup.setBounds(ss.width / 2 - 200 / 2, ss.height / 2 + 90 - 100, 200, 65);
login.setBounds(ss.width / 2 - 200 / 2, ss.height / 2 - 100, 200, 65);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==login) {
ChatWindowMain chatWindow = new ChatWindowMain();
}
}
}
Here's the next class for the main chat window(not finished yet):
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
public class ChatWindowMain extends ChatWindowLogin{
Dimension ss;
JButton send;
JTextField enter;
JFrame frame;
JPanel chatPanel = new JPanel();
public ChatWindowMain() {
send = new JButton();
chatPanel.setLayout(new BorderLayout());
chatPanel.add(send);
chatPanel.add(send);
frame.add(chatPanel);
this.add(chatPanel);
}
}
Also when using a layout such as border layout, can you still put the objects anywhere you want and have them at any size you want? And for the login class, do I need a main method there, because eclipse says I do.