【发布时间】:2020-12-26 08:24:15
【问题描述】:
我从swing开始,我对如何在GridBagLayout中对齐元素有一些疑问,我也不确定这是否是正确的方法,请指教。
我有以下代码
import javax.swing.*;
import java.awt.*;
public class App {
public void start() {
JPanel mainPanel = new JPanel(new FlowLayout());
mainPanel.setBorder(BorderFactory.createLineBorder(Color.CYAN, 20));
//buttons for initial options
JButton button1 = new JButton("This is option A");
JButton button2 = new JButton("option B");
JButton button3 = new JButton("Another text");
JPanel second = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.CENTER;
second.setBackground(Color.GREEN);
second.add(button1, gbc);
second.add(button2, gbc);
second.add(button3, gbc);
mainPanel.add(second, BorderLayout.CENTER);
//frame configuration
JFrame frame = new JFrame();
frame.setContentPane(mainPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setResizable(false);
}
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
SwingUtilities.invokeLater(() -> new App().start());
}
}
我的目标是产生以下输出:
到目前为止,我已经尝试使用垂直对齐的 BoxLayout,它可以工作,但问题是它会覆盖按钮的首选大小,我希望它们都具有相同的宽度。
另外,我尝试使用 GridLayout 和 BorderLayout 将元素添加到 NORTH、CENTER 和 SOUTH,但按钮的大小会发生变化。
在保持元素尺寸的情况下,将元素居中的推荐方法是什么?
【问题讨论】:
标签: java swing center layout-manager gridbaglayout