如何在 BoxLayout 中设置 JComponent 的位置?

How to set position to JComponent in BoxLayout?

我想使用 2 JPanel 作为 panelpanel_1。 我想使用 JLabel 自动将图像添加到面板 并将 JButton 添加到 panel_1.

如何根据按钮上方的图片调整按钮大小?

public class Testing extends JFrame {

    public Testing() {
        this.setSize(590, 327);
        this.setTitle("JFrame");
        getContentPane().setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(118, 136, 321, 89);
        getContentPane().add(panel);
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));

        JLabel lblImage = new JLabel("image for button1");
        panel.add(lblImage);

        JLabel lblImage_1 = new JLabel("image for button2");
        panel.add(lblImage_1);

        JLabel lblImage_2 = new JLabel("image for button3");
        panel.add(lblImage_2);

        JPanel panel_1 = new JPanel();
        panel_1.setBounds(118, 30, 321, 77);
        getContentPane().add(panel_1);
        panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.X_AXIS));

        JButton btnNewButton = new JButton("New button 1");
        panel_1.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("New button 2");
        panel_1.add(btnNewButton_1);

        JButton btnNewButton_2 = new JButton("New button 3");
        panel_1.add(btnNewButton_2);
    }

    public static void main(String[] args) throws Exception {
        Testing frame = new Testing();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }
}

如果您的目标是让按钮位于图片上方,并且按钮的宽度随图片一起扩展,那么:

  • 摆脱对空布局的使用和.setBounds(...)(这只是很好的一般性建议)
  • 将带有图像的 JLabel 放入使用 BorderLayout 的 JPanel 中,JLabel 在 BorderLayout.CENTER 位置
  • 使用 BorderLayout.PAGE_START 位置将按钮放在同一 JPanel 中的 JLabel 上方。
  • 然后将该 JPanel 放在 GUI 中任何需要的地方,嵌套 JPanel,每个 JPanel 使用自己的布局管理器。

BorderLayout 将允许中心组件填充该位置,并将扩展 PAGE_START 和 PAGE_END 位置以填充必要的宽度。如果顶部和底部组件更宽,那么这也会扩大容器的宽度。