java - JPanel 在 JScrollPane 中填充了按钮

标签 java swing layout-manager

我目前正在尝试用按钮填充 JPanel(使用 GridLayout)。这些按钮应该是具有设定宽度的正方形。 该程序应该能够调整比赛 field 的大小(n*m 个按钮)。问题是,按钮会自动拉伸(stretch)以完全填充 JScrollpane,完全忽略设置的高度和宽度。从而使滚动条变得不必要。 这是我的代码:

创建面板:

panel_game = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane(panel_game);

尝试调整 JPanel 的大小:(其中 x 和 y 是按钮的数量,zoomlvl 是大小)

panel_game.setLayout(new java.awt.GridLayout(x, y));
panel_game.setBounds(panel_game.getX()+5,panel_game.getY()+5,x*zoomlvl-5,y*zoomlvl);
panel_game.setPreferredSize(new Dimension(x*zoomlvl,y*zoomlvl));  

并添加按钮:(f 是我的游戏场,一个 2D 数组)(buttons 是一个数组列表,包含我的按钮)

for(int i=0; i<f.getSize()[0]*f.getSize()[1];i++){
    buttons.add(new JButton());
    buttons.get(i).setSize(zoomlvl, zoomlvl);
    buttons.get(i).setPreferredSize(new Dimension(zoomlvl,zoomlvl));
    panel_game.add(buttons.get(i));
} 

我不知道如何告诉 Java 停止自动调整按钮等的大小。 如有帮助,我们将不胜感激:)

最佳答案

GridLayout 的构建是为了用组件填充使用它的容器。如果容纳按钮的容器尺寸受到限制,则按钮将拉伸(stretch)或填充以尽可能紧密地填充该容器。一个解决方案可能是嵌套布局管理器,这样就不会发生这种情况,但如果没有更多代码,我无法给出更具体的建议,特别是 minimal example program 。图片也可能有帮助。

关于java - JPanel 在 JScrollPane 中填充了按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22460834/

相关文章:

java - 从 Eclipse 部署 WebLogic 应用程序时出现 NoClassDefFoundError

Windows 上带有 libvirt 的 Java 客户端

java - 为电话号码创建自定义颜色

java - 调整 GridLayout 中面板的大小

java - JFrame、删除和创建 JPanel

java - 实现视频进度条

java - Android 上的蓝牙延迟补偿

java - 如何更改 JComboBox 中的箭头样式

java - 设置大小后 JLabel.setText() 不起作用

java - 我应该如何将 JscrollPane 添加到包含布局为 null 的 jg 面板的框架中