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

标签 java user-interface swing size jbutton

代码如下:

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

关于java - 为什么 setPreferredSize 不改变按钮的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2546079/

相关文章:

java - 如何在android studio中仅使用View Tag使用图像作为背景图像?

java - jtree 程序化多选

java - Java 中的 Swing GUI : Different elements won't layout properly for me

java - 使用自定义背景颜色时 swing 组件的 repaint() 错误

java - Tomcat 在请求完成时删除文件?

java - 如何反序列化可能是字符串、对象或列表的 json/gson

java - 无法将泛型数组直接分配给局部变量

java - SWT 文本输出和换行

c++ - 此 Windows 应用程序使用什么 API/SDK?

java - Swing 窗口的初始化方式有什么区别?