java - 如何定义表格的垂直对齐方式

标签 java swt

令人难以置信的简单问题:我有一个 SWT 表(查看器)并使用 SWT.MeasureItem 监听器来设置单元格高度。如何将单元格内容与单元格底部对齐?

(它可能会与 SWT.PaintItem 的另一个监听器一起工作,并进行一些数学计算并手动渲染我的所有单元格,但这不是正确的方法。)

public class TableDialog extends Dialog {

    public static void main(String[] args) {
        TableDialog dialog = new TableDialog(new Shell());
        dialog.open();
    }

    public TableDialog(Shell parent) {
        super(parent);
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText("Table Test");
        newShell.setSize(500, 300);
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite container = (Composite) super.createDialogArea(parent);
        container.setLayout(new FillLayout());

        TableViewer viewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION);
        viewer.setContentProvider(new ArrayContentProvider());
        viewer.setInput(Arrays.asList("A", "B", " C"));

        Table table = viewer.getTable();
        table.setLinesVisible(true);
        table.addListener(SWT.MeasureItem, e -> e.height = 90);

        return container;
    }
}

最佳答案

开始使用 SWT.MeasureItem 后,您还需要进行绘图。

由于您使用的是 TableViewer,因此您可以通过使用 OwnerDrawLabelProvider 作为查看器标签提供程序将所有这些组合到一个类中。一个非常简单的版本将是这样的:

viewer.setLabelProvider(new OwnerDrawLabelProvider()
  {
    @Override
    protected void paint(final Event event, final Object element)
    {
      String text = element.toString();

      GC gc = event.gc;

      int textHeight = gc.textExtent(text).y;

      int yPos = event.y + event.height - textHeight;

      gc.drawText(text, event.x, yPos);
    }


    @Override
    protected void measure(final Event event, final Object element)
    {
      event.height = 90;
    }


    @Override
    protected void erase(final Event event, final Object element)
    {
      // Stop the default draw of the foreground
      event.detail &= ~SWT.FOREGROUND;
    }
  });

关于java - 如何定义表格的垂直对齐方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40023834/

相关文章:

java - 如何按 JFace TableViewer 的多列排序

java - 如何使各种 SWT RowLayout 内的所有按钮具有相同的宽度

java - SWT 标签在处置和重新创建后不显示

java - 如何在java中获取字符串/字符的高度?

swing - 单击 JButton 时 ViewPart 挂起

java - 如何在将要翻转的 Windows 中读取日志文件?

java - java中如何连接两行?

java - 我可以在调试期间更改私有(private)字段的值吗?

java - 使用 Mapreduce 在 hadoop 中将文本文件转换为 Avrofile

java - 从 Json 响应中转义\n和\"