当前位置: 首页 > 知识库问答 >
问题:

SWT java-使用GridData和GridLayout绘制

督飞羽
2023-03-14

我正在尝试绘制一个外壳(实际上是一个复合标签),看起来像我附加的图像。我几乎尝试了每个小部件的所有功能-GridData、GridLayout,试图更改水平跨越和列的数量,但没有任何东西出现在我需要的地方...:(

我尝试使用此链接http://www.eclipse.org/articles/Article-Understanding-Layouts/Understanding-Layouts.htm但没有成功。

谁能给我指路吗?

非常感谢。

共有1个答案

祁驰
2023-03-14

这应该是一个很好的起点:

public static void main(String args[])
{
    Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new GridLayout(2, false));

    Composite radioLeft = new Composite(shell, SWT.BORDER);
    radioLeft.setLayout(new GridLayout(6, false));
    radioLeft.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    for (int i = 0; i < 12; i++)
    {
        Button button = new Button(radioLeft, SWT.RADIO);
        button.setText("Radio " + i);
        button.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    }

    Composite radioRight = new Composite(shell, SWT.BORDER);
    radioRight.setLayout(new GridLayout(4, false));
    radioRight.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    for (int i = 0; i < 8; i++)
    {
        Button button = new Button(radioRight, SWT.RADIO);
        button.setText("Radio " + i);
        button.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    }

    Group groupLeft = new Group(shell, SWT.NONE);
    groupLeft.setLayout(new GridLayout(6, false));
    groupLeft.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    for (int i = 0; i < 12; i++)
    {
        Label label = new Label(groupLeft, SWT.NONE);
        label.setText("Something " + i);
        label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    }

    Group groupRight = new Group(shell, SWT.NONE);
    groupRight.setLayout(new GridLayout(1, false));
    groupRight.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

    for (int i = 0; i < 2; i++)
    {
        Label label = new Label(groupRight, SWT.NONE);
        label.setText("Something " + i);
        label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    }
    Group bottom = new Group(shell, SWT.NONE);
    bottom.setLayout(new GridLayout(6, false));
    bottom.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    for (int i = 0; i < 12; i++)
    {
        Label label = new Label(bottom, SWT.NONE);
        label.setText("Something " + i);
        label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    }

    Composite buttonComp = new Composite(shell, SWT.NONE);
    buttonComp.setLayout(new GridLayout(2, true));
    buttonComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Button left = new Button(buttonComp, SWT.PUSH);
    left.setText("Left");
    left.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    Button right = new Button(buttonComp, SWT.PUSH);
    right.setText("Right");
    right.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!shell.getDisplay().readAndDispatch())
            shell.getDisplay().sleep();
    }
}

看起来像这样:

 类似资料:
  • 我理解并能使用FormLayout,FormData,FormAttachment,但我不理解GridLayout,GridData是如何工作的。我想学习使用GridLayout和GridData,因为它更像一个表,它有一个结构,不依赖于其他小部件。 我是一名网络开发人员(前端、后端),我迷失在Java“网格”结构中。我应该如何对齐,在单元格内移动小部件(水平/垂直Aling,hor。/vert。

  • 本文向大家介绍Android使用GridLayout绘制自定义日历控件,包括了Android使用GridLayout绘制自定义日历控件的使用技巧和注意事项,需要的朋友参考一下 效果图 思路:就是先设置Gridlayout的行列数,然后往里面放置一定数目的自定义日历按钮控件,最后实现日历逻辑就可以了。 步骤: 第一步:自定义日历控件(初步) 第二步:实现自定义单个日期按钮控件 第三步:将第二步得到的

  • 介绍 (Introduction) GridLayout类在矩形网格中排列组件。 类声明 以下是java.awt.GridLayout类的声明: public class GridLayout extends Object implements LayoutManager, Serializable 类构造函数 SN 构造函数和描述 1 GridLayout() 在单行中创建一

  • 介绍 (Introduction) GridLayout类将组件排列在矩形网格中。 Class 声明 (Class Declaration) 以下是java.awt.GridLayout类的声明 - public class GridLayout extends Object implements LayoutManager, Serializable 类构造函数 (Class

  • (初学者) 嗨,很抱歉问这个问题,但是我总是有错误从哪里冒出来,我希望这个程序很简单。 理想情况下,我会在填充颜色时使用2D数组JFrame,但显然它们必须是final或实际上是final。