有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在带有BoxLayout的JPanel中设置JButton的大小并没有按预期工作

最近,我开始用Java做UI开发;我以前用WPF做UI开发。 Java的一些做法令人困惑

我试图实现的是设置按钮的最小大小。 以下是简化代码:

public class MainGameView extends JPanel {  
    public MainGameView(DefaultController controller) {

        this.controller = controller;
        CreateUI();
    }

    private void CreateUI() {
        MenuPanel = new javax.swing.JPanel();
        StartGameBtn = new JButton("Start Game"); 

        // Creating menu
        MenuPanel.setLayout(new BoxLayout(MenuPanel, BoxLayout.Y_AXIS));
        MenuPanel.setPreferredSize(new Dimension(200, 200));

        StartGameBtn.setAlignmentX(Component.LEFT_ALIGNMENT);     
        StartGameBtn.setMinimumSize(new Dimension(200, 30)); 
        MenuPanel.add(StartGameBtn);
    } 
}

所以据我所知,如果容器被分配200像素作为其宽度,它应该相应地为按钮分配200像素的宽度。不过,按钮的大小保持不变。我错过什么了吗


共 (1) 个答案

  1. # 1 楼答案

    BoxLayout不会水平拉伸组件,它将允许组件保持其首选宽度。您应该使用水平拉伸的布局管理器。例如,根据您试图执行的操作,可以使用BorderLayout:

      MenuPanel.setLayout(new BorderLayout(0,0));
      MenuPanel.setPreferredSize(new Dimension(200, 200));
      StartGameBtn.setAlignmentX(Component.LEFT_ALIGNMENT);     
      MenuPanel.add(StartGameBtn, BorderLayout.NORTH);
    

    这会将按钮置于顶部,保持其自然的首选高度,并将其水平拉伸以适应菜单面板的宽度,即使调整了大小也是如此。您还可以查看GridLayout(配置为1列),我相信它将允许您在一个垂直列中添加多个组件,所有组件都将拉伸以适应主面板的整个宽度