使用MigLayout限制列的增长

时间:2018-02-21 12:15:41

标签: java swt miglayout

我使用Shell进行了以下测试MigLayout我想创建一个简单的表单(左侧标签,右侧文本字段)。
标签应占用所需的空间,文本应自动增长到父组合的右边缘。

在我向文本字段添加大文本之前,这很有效。然后,文本字段将扩展到父组合的边缘:

短文字作品
short text works
长文字越过边缘
long text grows over the edge

如果文字太长,如何配置右栏以在右边缘停止生长?

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

import net.miginfocom.swt.MigLayout;

public class TestShell {

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setSize(400, 200);
        shell.setLayout(new GridLayout());

        Composite composite = new Composite(shell, SWT.BORDER);
        composite.setLayoutData(new GridData(200, 100));

        composite.setLayout(new MigLayout("fillx"));

        Label label = new Label(composite, SWT.NONE);
        label.setText("LABEL");

        Text text = new Text(composite, SWT.BORDER);
        text.setLayoutData("growx, pushx");
        //      text.setText("TEXT");
        text.setText("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");

        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }
}


使用GridLayout,这可以正常工作:

composite.setLayout(new GridLayout(2, false));
...
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));

我有没有办法让MigLayout表现得像GridLayout,但有所有其他MigLayout功能呢?

1 个答案:

答案 0 :(得分:0)

最简单的方法是在std::vector<vec2> vec = { vec2(1,1), vec2(4,4), vec2(5,5), vec2(9,9) }; 之后调用setText

shell.open();

enter image description here