【问题标题】:Why setPreferredSize does not change the size of the button?为什么 setPreferredSize 不改变按钮的大小?
【发布时间】:2010-03-30 14:41:28
【问题描述】:

代码如下:

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) 都对中间列的宽度没有影响。为什么?

【问题讨论】:

  • 阅读教程。您已经多次获得 Swing 教程的链接。这在“如何使用网格布局”的教程中有清楚的解释。在你自己做一些基本的阅读之前,不要让所有这些问题充斥论坛。现在是最近几天与布局管理器相关的 7 个问题。令人难以置信的是人们继续回答这些问题,尤其是当您不接受给出的答案时。
  • @camickr,没有人强迫你回答我的问题。有些人有问题,有些人准备回答这个问题。这些人可以找到共同的语言和合作方式。如果您不明白它为什么起作用,请不要参与其中。并且不要打扰其他人。
  • 我了解它的工作方式。你做一些研究,当你遇到问题时,你会发布一个寻求帮助的问题。我们不是来为您阅读的。只要你努力,我们就会努力。

标签: java user-interface swing size jbutton


【解决方案1】:

布局管理器可以随意忽略首选尺寸。具体来说,GridLayout 将始终使网格中的每个单元格的大小完全相同(因此,它是一个非常无用的布局管理器)。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      setPreferredSize 在使用 Dimension 设置维度之前不会更改按钮的大小。

      例子:-

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

      【讨论】:

      • 在这种情况下,设置 Dimension 将无济于事。正在使用的 GridLayout 不能完全遵守 setPreferredSize。 GridLayout 根据最大​​宽度和高度将所有高度和宽度设置为相同。另外请注意,最大的高度和宽度不必来自同一个组件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 2021-09-27
      相关资源
      最近更新 更多