gpt4 book ai didi

java - 如何在调整 JFrame 大小或最大化时使 JPanel 居中?

转载 作者:行者123 更新时间:2023-11-29 10:02:14 24 4
gpt4 key购买 nike

当我最大化或调整 JFrame 大小时,我希望我的 JPanel 仍然位于中心。我该怎么做?

尝试过:

  jframe.add(panel, BorderLayout.CENTER);
panel.setAlignmentX(JComponent.CENTER_ALIGNMENT);

但它不起作用。

这是我的其他代码:

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {
public void run() {
try {
login frame = new login();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

public login() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBounds(5, 5, 409, 267);
setLocationRelativeTo(null);
contentPane = new JPanel();
contentPane.setBackground(new Color(0, 128, 128));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

panel = new JPanel();
panel.setBounds(57, 42, 292, 167);
panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Login", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 255)));
panel.setLayout(null);
contentPane.add(panel);

textField = new JTextField();
textField.setBounds(71, 35, 192, 26);
panel.add(textField);
textField.setColumns(10);

passwordField = new JPasswordField();
passwordField.setBounds(71, 72, 192, 26);
panel.add(passwordField);

JLabel lblNewLabel = new JLabel("Username:");
lblNewLabel.setBounds(6, 41, 68, 14);
panel.add(lblNewLabel);

JLabel lblNewLabel_1 = new JLabel("Password:");
lblNewLabel_1.setBounds(6, 78, 68, 14);
panel.add(lblNewLabel_1);

JButton btnNewButton = new JButton("Login");
btnNewButton.setBounds(71, 120, 89, 23);
panel.add(btnNewButton);



JButton btnNewButton_1 = new JButton("Cancel");
btnNewButton_1.setBounds(174, 120, 89, 23);
panel.add(btnNewButton_1);

我将如何在这里做到这一点?

enter image description here

enter image description here

最佳答案

您可以简单地在父容器上使用 GridBagLayout。它将所有组件布置在容器的中心周围。

Normal Max

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;

public class CenterComponent {

public static void main(String[] args) {
new CenterComponent();
}

public CenterComponent() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel content = new JPanel(new GridBagLayout());
content.setBackground(Color.GREEN);
content.setBorder(new EmptyBorder(20, 20, 20, 20));
frame.setContentPane(content);
frame.add(new LoginPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class LoginPane extends JPanel {

public LoginPane() {
setLayout(new GridBagLayout());
setBorder(new TitledBorder("Login"));

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(new JLabel("Username:"), gbc);
gbc.gridy++;
add(new JLabel("Password:"), gbc);

gbc.gridx++;
gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
add(new JTextField(10), gbc);
gbc.gridy++;
add(new JTextField(10), gbc);

gbc.gridx = 1;
gbc.gridy++;
gbc.gridwidth = 1;
gbc.weightx = 0;
gbc.fill = GridBagConstraints.NONE;
add(new JButton("Login"), gbc);
gbc.gridx++;
add(new JButton("Cancel"), gbc);
}

}

}

关于java - 如何在调整 JFrame 大小或最大化时使 JPanel 居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21058565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com