java - 如何让大组件在使用JGoodies FormLayout时不至于炸毁布局?

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

最佳答案

首选尺寸的规范使布局能够以首选尺寸显示按钮。结果,有些按钮不适合。尝试指定不同的约束。例如,使用恒定大小以及增长和填充的组合。例如尝试这些:

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

关于java - 如何让大组件在使用JGoodies FormLayout时不至于炸毁布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344178/

相关文章:

java - 无法将 JTable 添加到 GUI

java - 如何对齐两个JButton以使其右对齐?

java - JLayeredPane 自动调整内容大小

java - 基本颠覆问题

使用 ExecutorService 时出现 java.util.ConcurrentModificationException

java - glDrawElements 不绘制任何东西

java - 如何在关闭第一个窗口后打开一个新窗口?

java - 如何创建一个一次只接受一个连接的 rmi 服务器?

java - 修改 JLabel 文本会改变其对齐方式

java - 网格袋布局不会填充按钮