为什么setPreferredSize不会改变按钮的大小?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么setPreferredSize不会改变按钮的大小?相关的知识,希望对你有一定的参考价值。

这是代码:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class TestGrid {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Colored Trails");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4, 9));
        panel.setMaximumSize(new Dimension(9*30-20,4*30));

        JButton btn;
        for (int i=1; i<=4; i++) {
            for (int j=1; j<=4; j++) {
                btn = new JButton();
                btn.setPreferredSize(new Dimension(30, 30));
                panel.add(btn);
            }

            btn = new JButton();
            btn.setPreferredSize(new Dimension(30, 10));
            panel.add(btn);

            for (int j=1; j<=4; j++) {
                btn = new JButton();
                btn.setPreferredSize(new Dimension(30, 30));
                panel.add(btn);
            }

        }
        mainPanel.add(panel);
        frame.add(mainPanel);

        frame.setSize(450,950);
        frame.setVisible(true);
    }
}

我想有一个4行9列的按钮表。中间列应该比其他列窄。我试过Dimension(30, 10)Dimension(30, 10)都对中间列的宽度没有影响。为什么?

答案

布局管理员可以自由地忽略首选大小。具体来说,GridLayout将始终使网格中的每个单元格大小完全相同(由于这个原因,它是一个非常无用的布局管理器)。

您将不得不使用不同的布局管理器,例如嵌套的BoxLayoutGroupLayout

另一答案

GridLayout非常不灵活,因为每个单元格大小相同,通常表示添加到网格中的任何对象的最大高度和宽度设置。

如果行和/或列需要具有不同的大小,则应使用GridBagLayout。

另一答案

在使用Dimension设置尺寸之前,setPreferredSize不会更改按钮的大小。

例:-

Dimension dim = new Dimension(20,20), then use setPerferredSize(dim).

另一答案

我找到了这个方法版本,非常适合您的解决方案:

.addComponent(<<a jButton instance>>, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, <<put here an integer to set you max width button size>>)

以上是关于为什么setPreferredSize不会改变按钮的大小?的主要内容,如果未能解决你的问题,请参考以下文章

尺寸,只改变宽度/高度

删除源文件后数据网格不会改变

选择特定的下拉菜单项后,下拉按钮的值不会改变

setPreferredSize和setSize的区别及用法

按钮图像在单击时不会改变,直到我快速单击另一个按钮

android studio中的按钮颜色不会改变