【问题标题】:Component setSize method in FlowLayout objectFlowLayout 对象中的组件 setSize 方法
【发布时间】:2013-10-28 14:59:12
【问题描述】:

我目前正在制作一个使用 FlowLayout 类的 GUI。现在,这个类是为了允许组件通过他们喜欢大小的方法设置,我相信,不应该优先设置组件大小。但是,当我对 JTextField 使用 setSize 方法时,FlowLayout 对象似乎无法识别更改大小命令。但是当我使用 setColumn 方法时,FlowLayout 对象确实响应了更改大小命令。

这是为什么?

【问题讨论】:

标签: java swing components flowlayout preferredsize


【解决方案1】:

FlowLayout 对象似乎无法识别更改大小命令。 但是当我使用 setColumn 方法时,FlowLayout 对象确实 响应大小命令的变化。 这是为什么?

形成您自己的问题,我知道您知道FlowLayout 的工作遵循组件的首选大小。但是要回答您的问题,为什么真的JTextFeild.setColumn(int) 会回复:因为

一旦调用setColumn(int),它就会使JTextFeild 组件及其上方的所有父组件失效() 以标记为需要布局

public void setColumns(int columns) {
        int oldVal = this.columns;
        if (columns < 0) {
            throw new IllegalArgumentException("columns less than zero.");
        }
        if (columns != oldVal) {
            this.columns = columns;
            invalidate(); // invalidate if column changes
        }
    }

然后在布局时,FlowLayout 调用 JTextFeild 的 getPreferredSize() 函数,该函数被重写并实现,以便通过添加列宽返回首选宽度:

public Dimension getPreferredSize() {
        Dimension size = super.getPreferredSize();
        if (columns != 0) {
            Insets insets = getInsets();
            size.width = columns * getColumnWidth() +
                insets.left + insets.right;  // changing the width
        }
        return size;
    }

你猜怎么着!我正在成为源代码的粉丝。

【讨论】:

    猜你喜欢
    • 2016-09-26
    • 2010-12-19
    • 2011-04-08
    • 2020-03-06
    • 2014-12-07
    • 2012-02-25
    • 2012-03-22
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多