【问题标题】:Java Swing: How do I define one minimal dimension (of the two) for components?Java Swing:如何为组件定义一个最小维度(两者中的一个)?
【发布时间】:2011-04-21 12:02:37
【问题描述】:

要成功定义最小尺寸,我必须执行以下操作:

// setting minimal width AND height
Dimension min = new Dimension(100, 100);
comp.setMinimumSize(min);
comp.setPreferredSize(min);
comp.setSize(min);

当我留下一行时它不起作用,这很奇怪,但这不是重点。

我该怎么做才能只限制一个两个维度(宽度高度)并让组件和/或布局管理器自动决定未指定维度?

当我对我不想限制的维度使用非常小的值时,许多组件显示错误(即太小)。

【问题讨论】:

    标签: java swing size dimensions layout-manager


    【解决方案1】:

    默认情况下(即如果组件上没有调用setMinimumSizegetMinimumSize 委托给组件的布局管理器,因此您可以尝试重新定义getMinimumSize 方法,如下所示:

    public Dimension getMinimumSize()
    {
        return new Dimension(minWidth, super.getMinimumSize().height);
    }
    

    如果你这样做,请记住你不应该在组件上调用setMinimumSize

    【讨论】:

    • 我不明白:你的意思是我应该覆盖组件的getMinimumSize,还是你的意思是布局管理器?谢谢!
    • 覆盖组件中的方法。只要没有在组件上调用setMinimumSize,它就会委托给布局管理器。通过覆盖我描述的方式,您可以获得高度的“默认行为”,但您可以明确指定最小宽度。
    • 作为一个 Java 初学者,它首先看起来是一个复杂的答案,因为我不想编写一个新类来覆盖它的方法。然后我认为可以像这样实现它:JPanel panel = new JPanel() { @Override public Dimension getMinimumSize() { return new Dimension(minWidth, super.getMinimumSize().height); } };
    【解决方案2】:

    我自己提出一个方法:

    对于将所有内容对齐一个轴的布局管理器(例如BoxLayout),可以将“未定义维度”设置为Integer.MAX。这很奇怪,但它有效。似乎忽略了与对齐轴相反的轴(除非它太小,如问题中所述)。

    private final static int UNSPECIFIED_DIMENSION = Integer.MAX_VALUE;
    
    public static void setMinimalDimension(Component comp, int width, int height) {
      Dimension dim = new Dimension(width, height);
      comp.setMinimumSize(dim);
      comp.setPreferredSize(dim);
      comp.setSize(dim);
    }
    
    public static void setMinimalWidth(Component comp, int width) {
      setMinimalDimension(comp, width, UNSPECIFIED_DIMENSION);
    }
    
    public static void setMinimalHeight(Component comp, int height) {
      setMinimalDimension(comp, UNSPECIFIED_DIMENSION, height);
    }
    

    如上所述,与轴对齐布局管理器一起使用。

    是的,Java Swing 还有另一个谜团......

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 2020-02-19
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多