使用JGoodies FormLayout时如何使大型组件不会炸毁布局?

时间:2014-08-16 21:30:30

标签: java swing layout-manager jgoodies form-layout

我正在使用JGoodies Forms 1.8.0

当单个超大标签导致整个布局不再适合窗口时,我遇到了问题。我希望在视觉上修剪该文本,因此对于用户而言显而易见的是文本不适合,但GUI的其余部分仍应保持适合。

我准备了一个展示相同行为的简化示例。这里一切正常,因为窗口足够大:

这是同一个窗口,但调整大小:

enter image description here

请注意,最右边的列不再可见。

期望的效果如下:

  • 如果文字适合,则应以完整的方式显示

  • 如果文字不合适,那么它应该被截断

  • 文字应左对齐

  • 所有按钮应始终可见

  • 按钮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);
    }
}

2 个答案:

答案 0 :(得分:2)

  

BorderLayout ......没有帮助

对我来说很好:

import java.awt.*;
import javax.swing.*;

public class Test8 extends JFrame {

    Test8() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(900, 600);

        JPanel left = new JPanel();
        left.setBackground(Color.BLUE);

        JPanel right = new JPanel(new BorderLayout());

        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));
        }

        right.add(fox, BorderLayout.NORTH);
        right.add(rightBottom, BorderLayout.CENTER);
        add(right);

    }

    public static void main(String[] args) {
        new Test8().setVisible(true);
    }
}

如果您不喜欢标签中显示的点,请尝试使用不可编辑的文本字段。

当某些内容无效时,请发布您尝试过的代码。口头解释没有帮助。

答案 1 :(得分:2)

首选大小的规格使布局显示按钮的首选大小。结果一些按钮不适合。尝试指定其他约束。例如,使用生长和填充组合的常量大小。例如,试试这些:

this.setLayout(new FormLayout("100dlu,1dlu:g", "f:1dlu:g"));

right.setLayout(new FormLayout("f:1dlu:g", "p,5dlu,f:1dlu:g"));

在某些尺寸下,按钮标题不适合。

结果如下:

enter image description here