【发布时间】:2014-08-17 08:19:49
【问题描述】:
我正在使用 JGoodies Forms 1.8.0
当单个超大标签导致整个布局不再适合窗口时,我遇到了问题。我希望在视觉上修剪该文本,因此对于用户来说很明显文本不适合,但 GUI 的其余部分仍应保持适合。
我准备了一个展示相同行为的简化示例。这里一切正常,因为窗口足够大:
这里是同一个窗口,但调整了大小:
请注意,最右边的列不再可见。
想要的效果如下:
如果文本适合,则应完整显示
如果文本不合适,则应将其末尾剪掉
文本应左对齐
所有按钮都应该始终可见
按钮 100 应该在窗口的最角落
截图代码如下:
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame {
Test() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(900, 600);
JPanel left = new JPanel();
left.setBackground(Color.BLUE);
JPanel right = new JPanel();
JLabel fox = new JLabel("The quick brown fox jumps over the lazy dog.");
fox.setFont(new Font(null, 0, 50));
JPanel rightBottom = new JPanel();
rightBottom.setLayout(new GridLayout(10, 10));
for (int i = 1; i <= 100; i++) {
rightBottom.add(new JButton("butt" + i));
}
CellConstraints cc = new CellConstraints();
this.setLayout(new FormLayout("100dlu,p:g", "f:p:g"));
this.add(left, cc.xy(1, 1));
this.add(right, cc.xy(2, 1));
right.setLayout(new FormLayout("f:p:g", "p,5dlu,f:p:g"));
right.add(fox, cc.xy(1, 1));
right.add(rightBottom, cc.xy(1, 3));
}
public static void main(String[] args) {
new Test().setVisible(true);
}
}
【问题讨论】:
-
使用不同的布局管理器。例如边框布局。您可以将标签添加到 NORTH,然后创建第二个面板,其中包含使用添加到 CENTER 的 GridLayout 的所有按钮。否则,如果您仍想使用 FormLayout,那么我建议您需要创建一个 TopRight(用于标签)和 BottomRight(用于按钮)面板,每个面板将使用不同的约束。
-
BorderLayout和将fox用另一个FormLayout包装在自己的面板中都没有帮助。
标签: java swing layout-manager jgoodies form-layout