维度 - 内容被截断

时间:2016-11-14 09:47:36

标签: java json swing

所以我在我们的项目中有这个现有方法,它使用Dimension()定义小部件的宽度和高度:

wProps.setBounds("Widget.frame.bounds", new Rectangle(WidgetStartPosition.getInstance().getStartPos(),new Dimension(getDefWidth(), getDefHeight())))

getDefWidth()getDefHeight()都检索硬编码值。

  

示例:int height = 360; int width = 210;

public void setBounds(String key, Rectangle r)
{
    if (key == null || "".equals(key) || r == null)
        return;

    try
    {
        JSONObject jObject = new JSONObject();
        jObject.put(X, r.x);
        jObject.put(Y, r.y);
        jObject.put(WIDTH, r.width);
        jObject.put(HEIGHT, r.height);
        getLocalJSONObject().put(key, jObject);
    }
    catch (JSONException e)
    {
        e.printStackTrace();
    }
}

因为我注意到新Dimension()的宽度和高度都是硬编码的。然后,如果窗口小部件的内容宽度大于新Dimension()中定义的宽度,则内容将被截断并剪切。 我想要做的是在Dimension()中设置值,具体取决于窗口小部件内容的总宽度和总高度,因为窗口小部件的内容每天都在变化。这可能吗?

1 个答案:

答案 0 :(得分:0)

不要硬编码任何Swing组件的宽度/高度值。每个组件负责确定自己的大小,然后布局管理器可以在确定面板上每个组件的大小/位置时完成其工作。

  

我想要做的是在Dimension()中设置值,具体取决于小部件内容的总宽度和总高度

您需要覆盖组件的getPreferredSize()方法。这是一个动态计算,只要组件的属性发生变化,就可以进行动态计算。

因此,随着内容的更改,首选大小也会发生变化。想想像JLabel这样的组件。随着文本更改其首选大小更改。