所以我在我们的项目中有这个现有方法,它使用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()
中设置值,具体取决于窗口小部件内容的总宽度和总高度,因为窗口小部件的内容每天都在变化。这可能吗?
答案 0 :(得分:0)
不要硬编码任何Swing组件的宽度/高度值。每个组件负责确定自己的大小,然后布局管理器可以在确定面板上每个组件的大小/位置时完成其工作。
我想要做的是在Dimension()中设置值,具体取决于小部件内容的总宽度和总高度
您需要覆盖组件的getPreferredSize()
方法。这是一个动态计算,只要组件的属性发生变化,就可以进行动态计算。
因此,随着内容的更改,首选大小也会发生变化。想想像JLabel这样的组件。随着文本更改其首选大小更改。