GridBagLayout中的被动元素?

时间:2017-02-10 14:51:41

标签: java swing layout-manager gridbaglayout

我在Swing对话框中有JLabel提供多行描述,因此其内容包含在<html><body width="...">标记中。该对话框还包含一个JComboBox,它应该是布局管理器确定对话框宽度的来源 - 如果有一个长选项,它应该更宽。

不幸的是,由于绝对像素值,标签总是具有相同的宽度,如果我将其设置为100%,它会将对话框吹向屏幕宽度,同时尝试在一行中显示其内容

GridBagLayout中是否有一个选项让它在计算整体宽度时忽略组件的宽度然后只给它一个值?

2 个答案:

答案 0 :(得分:1)

您可以使用JLabel并使用JTextArea方法来控制换行,而不是使用setLineWrap(...)来换行文本。然后,您可以使用setColumns(...)方法来控制文本区域的宽度。

您可以更改文本区域的背景颜色,使其看起来像JLabel。

  

GridBagLayout中是否有一个选项让它在计算总宽度时忽略组件的宽度然后只给它一个值?

不,但您可以覆盖getPreferredSize(...)的{​​{1}}方法来进行自定义计算。您可以根据自定义标签上设置的自定义属性来修复宽度。不确定如何确定高度。我从来没有看过HTML包装大小计算的逻辑。

答案 1 :(得分:0)

虽然@camickr写了他的答案,但我已经实现了一个解决方法:我现在将JLabel的文本设置为在对话框上调用pack()之前的最后一步,并按照这样做:

String labelText = "<html><body>";
labelText += "<p style=\"width: " + (comboBox.getPreferredSize().width) + ";\">";
labelText += "This is text.";
labelText += "</p></body></html>";

所以我基本上会问组合框的首选大小,并将其用作HTML样式width属性。