我无法找到一种方法来调整swing GUI中的某些组件大小。一些自定义标签被添加到FlowLayout中,当重新调整对话框大小时它们的行为并不符合预期。 该面板是使用jgoodies forms框架构建的。
如果要使用此功能,请将FlowLayout添加到xy(3, y)中。
FormLayout layout = new FormLayout("r:d, 5px, f:d:g", // columns
"p, p, 5px, p, 5px, p") // rows
当使用FlowLayout布局时,如果控件超出了容器的宽度,则会自动扩展并显示滚动条。
如果使用:
FormLayout layout = new FormLayout("r:d, 5px, f:10:g", // columns
"p, p, 5px, p, 5px, p") // rows
FlowLayout使用可用空间,第二行的项目会消失。
我想将包含FlowLayout的每个行的高度扩展到组件的当前高度。不幸的是,首选大小总是对应于单行的高度。
另一种布局是否更合适?左侧加粗的文本应右对齐,然后是FlowLayout。
[编辑]在尝试了数周后,实际问题可以归结为:
一组标签被添加到JPanel中。该JPanel应水平使用所有可用空间(对话框大小减去标记名称标签的宽度),并根据需要垂直扩展。如果JPanel的高度变大,则应出现垂直滚动条(水平滚动条从未显示)。
对话框可以显示多个JPanels,这些面板将一个接一个地显示(垂直方向)。
这里尝试使用GridBagLayout和WrapLayout:
public class GridBagLayoutTagPanel extends JPanel {
private static final long serialVersionUID = -441746014057882848L;
private final int NB_TAGS = 5;
public GridBagLayoutTagPanel() {
setLayout(new GridLayout());
JPanel pTags = new JPanel(new GridBagLayout());
pTags.setBackground(Color.ORANGE);
GridBagConstraints c = new GridBagConstraints();
c.ipadx = 5;
c.ipady = 5;
int rowIndex = 0;
for (int i = 0; i < NB_TAGS; i++) {
//add tag name
JLabel lTagName = new JLabel(String.format("Tag %s:", i));
lTagName.setFont(lTagName.getFont().deriveFont(Font.BOLD));
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = rowIndex++;
pTags.add(lTagName, c);
//add tag values
JPanel pTag = new JPanel(new BorderLayout());
pTag.add(new JLabel("+"), BorderLayout.LINE_START); //label used to add new tags
pTag.add(getWrapPanel(), BorderLayout.CENTER); //the list of tag values
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
pTags.add(pTag, c);
}
//JScrollPane sp = new JScrollPane(pTags);
//sp.setBorder(BorderFactory.createEmptyBorder());
add(pTags);
}
private static JPanel getWrapPanel() {
JPanel p = new JPanel(new WrapLayout(FlowLayout.LEFT, 5, 0));
for (int i = 0; i < 50; i++) {
p.add(new JLabel("t" + i));
}
return p;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().add(new GridBagLayoutTagPanel());
f.setSize(new Dimension(500, 300));
f.setVisible(true);
}
}
FormDebugUtils
类和/或FormDebugPanel
吗?这些调试工具帮助我几次看到了实际发生的情况。 - RobinFormLayout
,但还要声明FlowLayout
?FormLayout
与FlowLayout
不相同。 - Andrew Thompson