gpt4 book ai didi

java - 防止 JLabel 在 MigLayout 中增长

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:03 25 4
gpt4 key购买 nike

我正在尝试在 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 占据了其余区域):

enter image description here

但是,如果我在其下方放置一个 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 已经增长):

enter image description here

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

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

最佳答案

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

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

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

所以 span 使组件占用多个单元格,它们都被分配了默认的 growx 权重,但是 pushx 只占用第一个单元格成长。

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

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

关于java - 防止 JLabel 在 MigLayout 中增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com