Я новичок в java и кодирую фрейм логина, который после успешного входа в систему (в базу данных mysql (localhost using xampp)) закрывается и открывает основной кадр.Как центрировать группу компонентов в JPanel независимо от его размера
На экране «Мой вход» есть приветственная метка, пользовательская маркировка, метка пароля, текстовое поле и поле пароля и кнопка входа в систему. Я хочу, чтобы эти компоненты были центрированы в окне и оставались центрированными и не изменяли свой размер, не изменяя, насколько большой становится jpanel (путем перетаскивания его большего или меньшего размера после его отображения на экране).
Мой вопрос: как я могу заставить их оставаться центрированными и адаптировать свое местоположение к размеру панелей, если он изменится? Допустим, что размер панелей составляет 100 * 100, а кнопка находится на 50/50, а панель меняется на 200/200, но кнопка остается на 50/50, и если я устанавливаю ее по размеру по горизонтали или по вертикали, она просто увеличивается, но я хочу, чтобы он оставался одного и того же размера, просто адаптировал его местоположение к 100/100.
Я не могу представить изображения моих кадров, потому что кажется, что для этого требуется репутация, которая у меня нет, потому что я только что создал свою учетную запись. Надеюсь, вы можете представить, что я хочу сделать и что у меня есть сейчас.
Мой код LoginFrame используя GroupLayout следующий (я покинул ActionListener из причин его не имеет значения):
public LoginFrame() {
setTitle("LoginFrame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 363, 270);
contentPane = new JPanel();
contentPane.setBackground(Color.ORANGE);
contentPane.setBorder(new EmptyBorder(0, 0, 0, 0));
setContentPane(contentPane);
JLabel lblWelcome = new JLabel("Welcome");
JLabel lblNewLabel = new JLabel("Username: ");
textField = new JTextField();
textField.setColumns(10);
JLabel lblNewLabel_1 = new JLabel("Password: ");
passwordField = new JPasswordField();
JButton btnLogin = new JButton("Login");
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(107)
.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
.addComponent(lblNewLabel)
.addComponent(lblNewLabel_1))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addComponent(passwordField, GroupLayout.DEFAULT_SIZE, 106, Short.MAX_VALUE)
.addComponent(textField, GroupLayout.DEFAULT_SIZE, 104, Short.MAX_VALUE))
.addGap(75))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(145)
.addComponent(btnLogin)
.addContainerGap(145, Short.MAX_VALUE))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(149)
.addComponent(lblWelcome)
.addContainerGap(155, Short.MAX_VALUE))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(56)
.addComponent(lblWelcome)
.addGap(18)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(lblNewLabel))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(passwordField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(lblNewLabel_1))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(btnLogin)
.addContainerGap(64, Short.MAX_VALUE))
);
contentPane.setLayout(gl_contentPane);
}
Я надеюсь, что я получить некоторые полезные ответы на это, я пытался быть конкретными, скажите если ничего не пропало. Спасибо
Это действительно помогло мне сделать именно то, что я хотел достичь! – PeterYoshi