Java 使用BoxLayout设置JPanel内部JButton的大小不';I don’我没有按预期工作
最近,我开始用Java进行UI开发;我曾经在WPF中进行UI开发。 Java的一些做法令人困惑 我试图实现的是设置按钮的最小大小。 以下是简化代码:Java 使用BoxLayout设置JPanel内部JButton的大小不';I don’我没有按预期工作,java,swing,user-interface,jbutton,Java,Swing,User Interface,Jbutton,最近,我开始用Java进行UI开发;我曾经在WPF中进行UI开发。 Java的一些做法令人困惑 我试图实现的是设置按钮的最小大小。 以下是简化代码: public class MainGameView extends JPanel { public MainGameView(DefaultController controller) { this.controller = controller; CreateUI(); } priv
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像素的宽度。但是,按钮的大小保持不变。我在这里遗漏了什么吗?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列)我相信这将允许您在一个垂直列中添加多个组件,并且所有组件都将拉伸以适应主面板的整个宽度。布局管理器的一个大问题是,它们在设置组件大小时都遵循不同的规则。这尤其令人沮丧,因为swing确实鼓励您使用“面板中的面板”方法,即让多个面板使用不同的布局管理器嵌入彼此 例如,BoxLayout不会水平拉伸零部件,而是遵循“首选宽度” 解决方案是什么?您可以继续使用panels with panels解决方案并不断与layout manager对抗,也可以使用称为的第三方layout manager MigLayout非常灵活,易于使用,我认为它比任何默认的swing布局管理器都要好得多。此外,如果您使用类似于Google WindowBuilder的东西,您可以将MigLayout与拖放gui builder一起使用,并且仍然可以直接访问源代码