Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing MigLayout-在没有';没有足够的空间_Java_Swing_Layout_Constraints_Miglayout - Fatal编程技术网

Java Swing MigLayout-在没有';没有足够的空间

Java Swing MigLayout-在没有';没有足够的空间,java,swing,layout,constraints,miglayout,Java,Swing,Layout,Constraints,Miglayout,我已尝试使标签自动收缩,例如: 这是文本变成了这个i.. 然而,我无法做到这一点 我的布局如下所示: JPanel container = new JPanel(new MigLayout(new LC().fillX().gridGapX("2"))); container.add(new JXTitledSeparator("Text"), new CC().growX().spanX().wrap()); JLabel shrinkMeIfYouNeedTo = new JLabel("

我已尝试使标签自动收缩,例如:

这是文本
变成了
这个i..

然而,我无法做到这一点

我的布局如下所示:

JPanel container = new JPanel(new MigLayout(new LC().fillX().gridGapX("2")));
container.add(new JXTitledSeparator("Text"), new CC().growX().spanX().wrap());

JLabel shrinkMeIfYouNeedTo = new JLabel("Shrink Shrink");
container.add( shrinkMeIfYouNeedTo, new CC());
container.add( infoText,  new JLabel("Great, long, beautiful info text that shall never shrink"), new CC().growX().spanX().wrap());

JScrollPane scrollPane = new JScrollPane(container);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

我已经试过使用
shrinkX
shrinkPrioX
,但都没有效果,
minWidth(“1”)
也没有效果。

我不能包括所有内容,因为我没有SwingX,我不知道
infoText
是什么。但我觉得你在追求这种行为:

如果是,可以通过将最小宽度和首选宽度设置为0,将最大宽度设置为任意值来实现。使用
String
组件约束,可以像
width 0:0:100
那样执行


可运行示例

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;

import net.miginfocom.swing.MigLayout;

public class Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel container = new JPanel(new MigLayout("fill, gapx 2", "grow"));
        container.add(new JLabel("Header", SwingConstants.CENTER), "split, span, growx, wrap");

        JLabel shrinkMeIfYouNeedTo = new JLabel("Shrink Shrink");
        container.add( shrinkMeIfYouNeedTo, "growx, width 0:0:100");
        container.add( new JLabel("Great, long, beautiful info text that shall never shrink"), "growx");

        JScrollPane scrollPane = new JScrollPane(container);
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        frame.add(scrollPane);
        frame.setPreferredSize(new Dimension(800, 100));
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

仅使用spanX()而不是growX不起作用?不,因为spanX()会导致单元格占据行的其余部分,这不是我所需要的。因此,仅使用growX而不是spanX?我确实希望第二个组件增长,因此我显然需要使用growX(),并且我还希望它跨越整个宽度。问题只是第一个不想缩小的组件。很抱歉,这是一个非常晚的答案,但我发布的内容应该可以让你完成你想做的事情。我可能已经解决了(天知道,但谢谢,它看起来是正确的)。无论如何,我建议不要使用MigLayout的字符串API,因为您失去了所有compiletime安全;)