【问题标题】:SWT layout problem - padding for labels possible?SWT 布局问题 - 可以填充标签吗?
【发布时间】:2015-03-12 16:20:11
【问题描述】:

我在我的 SWT GUI 应用程序中使用 GridLayout。我为每个网格单元定义了以下 GridData。网格单元本身只是一个标签。

    GridData gridData = new GridData();
    gridData.horizontalAlignment = GridData.FILL;
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    gridData.heightHint = 25;
    gridData.widthHint = 25;
    gridData.verticalAlignment = GridData.VERTICAL_ALIGN_CENTER;
    gridData.verticalIndent = 10;

然后我像这样创建每个标签元素 -

    Label l = new Label(shell, SWT.BORDER);
    l.setAlignment(SWT.CENTER);
    l.setText("some text");
    l.setLayoutData( gridData );

现在我的问题是,尽管在标签本身上使用了 verticalAlignment 属性、verticalIndent 属性和 setAlignment,但我无法使文本相对于网格单元区域 (25 x 25) 垂直居中对齐。我想我错过了一些东西。如何在网格单元中实现垂直居中对齐?

【问题讨论】:

    标签: java user-interface swt


    【解决方案1】:

    CL标签?为什么不用呢?

    CLabel cl = new CLabel(shell, SWT.CENTER);
    cl.setBounds(0, 0, 100, 100);
    cl.setText("Custom Label!!!");
    

    甚至,您可以使用 leftMargin、rightMargin、topMargin、bottomMargin。

    (三年后我很抱歉)

    【讨论】:

      【解决方案2】:

      标签上没有 setVerticalAlignment(),如果您使用 LayoutData 中的 heightHint 设置高度,它将成为控件的大小并有效地阻止您将其设置在中间。一种解决方法是将标签放入具有所需大小的组合中,然后将控件居中。例如

      Composite labelCell = new Composite(shell, SWT.BORDER);
      GridData gridData = new GridData();
      gridData.heightHint = 250;
      gridData.widthHint = 250;
      labelCell.setLayoutData(gridData);
      labelCell.setLayout(new GridLayout());
      Label l = new Label(labelCell , SWT.NONE);
      l.setText("some text");
      l.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
      

      【讨论】:

        【解决方案3】:

        我也为这个问题苦苦挣扎。 Label 不支持填充。我最终改用StyledText

        final StyledText text = new StyledText(parent, SWT.WRAP);
        final int padding = 5;
        
        text.setLeftMargin(padding);
        text.setRightMargin(padding);
        text.setTopMargin(padding);
        text.setBottomMargin(padding);
        
        text.setWordWrap(true);
        text.setCaret(null);
        

        这对我有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-11
          • 2016-06-12
          • 2018-11-24
          • 1970-01-01
          • 2013-09-27
          • 1970-01-01
          • 1970-01-01
          • 2011-10-28
          相关资源
          最近更新 更多