Я хочу сделать самый простой пример приложения для входа в систему, используя BorderLayout
(даже если бы я мог попробовать CardLayout
, если это необходимо) и фиксированные позиции компонентов для личной будущей справки.
В моем примере я создал три панели:
login_page
home_page
exit_page
Если информация для входа верна, программа переключается на home_page
.
Если данные для входа неверны, программа переключается на exit_page
.
Я проверил все возможные последовательности панелей. Когда я пытаюсь перейти от первой панели к следующей, компоненты следующей панели, кажется, перетаскиваются в сторону, например:
![enter image description here](https://i.stack.imgur.com/6Vypr.png)
Мне кажется, что я что-то упускаю, когда пытаюсь снова установить макет в конце метода actionPerformed
, но несколько примеров, которые я нашел в Интернете, использовали именно этот способ.
Как установить компоненты следующей панели в правильные положения?
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class LoginForm extends JFrame implements ActionListener
{
private JFrame frame; //main frame
private JPanel login_page; //3 different panels/pages/states
private JPanel home_page;
private JPanel exit_page;
private JLabel login_label; //login form components
private JLabel username_label;
private JLabel password_label;
private JTextField username_text;
private JPasswordField password_text;
private JButton login_button;
private JLabel home_label; //homepage components
private JButton logout_button;
private JLabel locked_label; //exit page components
private JButton exit_button;
LoginForm() //initialization for the components and panels
{
frame = new JFrame("Login Form frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//////////////////////////////////////////////////////
/////////login form components initialization/////////
//////////////////////////////////////////////////////
login_page = new JPanel();
login_label = new JLabel("Login label");
username_label = new JLabel("Username");
password_label = new JLabel("Password");
username_text = new JTextField();
password_text = new JPasswordField();
login_button = new JButton("Login");
login_button.addActionListener(this);
login_label.setBounds(100,30,400,30);
username_label.setBounds(80,70,200,30);
username_text.setBounds(300,70,200,30);
password_label.setBounds(80,110,200,30);
password_text.setBounds(300,110,200,30);
login_button.setBounds(150,160,100,30);
login_page.add(login_label);
login_page.add(username_label);
login_page.add(username_text);
login_page.add(password_label);
login_page.add(password_text);
login_page.add(login_button);
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////home page components initialization/////////
//////////////////////////////////////////////////////
home_page = new JPanel();
home_label = new JLabel("Home label");
logout_button = new JButton("Logout");
logout_button.addActionListener(this);
home_label.setBounds(100,30,400,30);
logout_button.setBounds(150,160,100,30);
home_page.add(home_label);
home_page.add(logout_button);
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////exit page components initialization/////////
//////////////////////////////////////////////////////
exit_page = new JPanel();
locked_label = new JLabel("You are now locked from the database");
exit_button = new JButton("Exit");
exit_button.addActionListener(this);
locked_label.setBounds(100,30,400,30);
exit_button.setBounds(150,160,100,30);
exit_page.add(locked_label);
exit_page.add(exit_button);
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
frame.setContentPane(login_page); //first page to get seen
frame.setSize(550,250); //size of the window
frame.setLayout(new BorderLayout());
frame.setVisible(true);
frame.setResizable(false);
}
@Override
public void actionPerformed(ActionEvent listener)
{
JButton button = (JButton) listener.getSource();
if(button == login_button)
{
String name = username_text.getText();
String password = new String(password_text.getPassword());
if(name.equals("x") && password.equals("x"))
{
frame.remove(login_page);
frame.setContentPane(home_page);
}
else
{
frame.remove(login_page);
frame.setContentPane(exit_page);
}
}
else if(button == logout_button)
{
frame.remove(home_page);
frame.setContentPane(login_page);
}
else if (button == exit_button)
{
frame.dispose();
}
frame.setLayout(new BorderLayout());
frame.validate();
frame.repaint();
}
public static void main(String args[])
{
LoginForm login = new LoginForm();
}
}