我正在以下列方式使用MigLayout
panel.setLayout(new MigLayout("",
"[][600!][]",
"[][][][][][][][][]"));
panel.add(composerTitle);
panel.add(composerText, "wmax 600");
panel.add(lblCount, "push, align right, wrap");
panel.add(costTitle);
panel.add(costText, "wrap,wmax 600");
panel.add(titleTitle);
panel.add(titleText, "wrap,wmax 600");
panel.add(publisherTitle);
panel.add(publisherText, "wrap,wmax 600");
panel.add(scoreinfoTitle);
panel.add(scoreinfoText, "wrap,wmax 600");
panel.add(languageTitle);
panel.add(languageText, "wrap,wmax 600");
panel.add(collectionTitle);
panel.add(collectionText, "wrap,wmax 600");
panel.add(numbersTitle);
panel.add(numbers, "grow, span 2, wrap");//JTextArea that uses line wrap
panel.add(contentTitle);
panel.add(content, "grow, span 2, wrap");//JTextArea
有时我的标签可能会超过600!我为列添加了约束。因此,我预计标签永远不会超过600,因为max设置为600.但是,如果标签有足够的文本,它就是这样做的。因此,我不得不为每个“wmax 600”添加约束。没有这个限制,我的标签就在框架内运行了。
有没有办法做到这一点,所以我不必为我添加的每个标签添加“wmax 600”。这似乎打败了600的目的!列的约束。
答案 0 :(得分:6)
MigLayout的基本特征:
那些与minSize只比其prefSize略小的标签相结合的那些导致那些过冲(又名:>小于单元宽度)的组件尺寸。要至少将组件约束与列约束分离(即,当后者更改时不必更改所有前者),您可以使用wmin:
JPanel panel = new JPanel();
panel.setLayout(new MigLayout("wrap 3, debug",
"[][300!][]"));
panel.add(new JLabel("first, normal: "));
panel.add(new JLabel("and here we want something reaaly long"
+ "and here we want something reaaly long")
, "wmin 0"
);
panel.add(new JLabel("10"));
panel.add(new JLabel("second: "));
panel.add(new JLabel("another"));
或者(如果你的应用程序中有很多这样的布局),子类JLabel并覆盖getMinPreferredSize返回(0,minHeight)。稍微有些脏,但是对于JLabel来说可能没有多大意义:毕竟默认情况下,它已经可以通过显示省略号来处理它,您可以进一步增强子类以显示带有完整文本的工具提示。