4

我正在尝试在 MigLayout 中创建一个表单。我希望在任何文本字段之前都用一个小的 JLabel 进行标记,文本字段会随着空间的可用而增长。我可以在以下代码中成功地做到这一点:

JFrame frame = new JFrame("Test");
JPanel panel = new JPanel(new MigLayout("", "fill", ""));
panel.add(new JLabel("Testing"));
panel.add(new JTextField(), "growx, pushx, wrap");
frame.setContentPane(panel);
frame.pack();
frame.setMinimumSize(new Dimension(400, 100));
frame.setPreferredSize(new Dimension(400, 100));
frame.setVisible(true);

结果看起来像这样,符合预期(JLabel 是最小的必要大小,JTextField 占据了其余区域):

在此处输入图像描述

但是,如果我在此下方放置一个 JEditorPane 并让它跨越整个窗口的长度,则如果我放大窗口,JLabel 会变大并增长。代码更改如下所示:

...
panel.add(new JTextField(), "growx, pushx, wrap");
//New line of code here:
panel.add(new JEditorPane(), "growx, pushx, span");
frame.setContentPane(panel);
...

这导致了我没想到的结果(JLabel 已经增长):

在此处输入图像描述

我试图通过为 JLabel 添加 MigLayout 参数来解决这个问题,比如"growx 0"and "shrink",但这似乎对标签的大小没有任何影响。

如何防止 JLabels 在这种情况下增长?

4

1 回答 1

6

我想到了!问题在于 JEditorPane 上的参数:

panel.add(new JEditorPane(), "growx, pushx, span");

事实证明,当使用span,时growx, pushx是不必要的(因为它已经变大了),当与它一起使用时,它会产生如上所示的效果。我的猜测是growx适用于所有标记为的单元格span,但pushx仅适用于第一个单元格。

因此span使组件占用多个单元格,它们都被分配了默认growx权重,但pushx只会使第一个单元格增长。

所以修复线路的正确方法很简单:

panel.add(new JEditorPane(), "span");
于 2013-05-02T02:42:06.717 回答