java - 更改 SWT 表/树中的行高

标签 java tree swt

我有一个树,其中填充了可能有图像(带有缩略图的行)的 TreeItems。我使用 MeasureItem 监听器调整行高,一切正常。

但是,现在我想让这个变化动态化。我检查一行是否应该有图像,如果当前列出的行中的任何一行有应该显示的图像,我将行高设置为 180px,所有行都具有该高度。如果没有包含图像的行,则行高应为 25px。

问题是,如果在任何时候将行高设置为 180 像素,我都无法将其改回 25 像素。 我的代码看起来像这样(简化):

//this check is run on each page of paginated results fetched from DB
rowHeight=25;
for(Result r : results){
    if(r.hasImage()){
        rowHeight=180;
        break;
    }
}


    // resize the row height using a MeasureItem listener
    tree.addListener(SWT.MeasureItem, new Listener() {
        public void handleEvent(Event event) {
            event.height = rowHeight;
        }
    });

    //added 'event.height=rowHeight' here just to check if it will draw as I want
    tree.addListener(SWT.EraseItem, new Listener() {
        public void handleEvent(Event event) {
            if(event.index!=ColumnType.SCREENSHOT.toIndexNum()){
                event.detail &= ~SWT.FOREGROUND;
            }
            event.height=rowHeight;
        }
    });

rowHeight 变量已设置为应有的值,MeasureListener 中的“event.height”也设置为相同的值。但是还是不想降低高度。在结果的每一页上,我都使用 tree.removeAll() 清除项目。也许我应该处理并重新创建表/树(我不想这样做)?

那么,知道怎么做了吗?

附言 不要混淆,我不需要行的不同高度,我知道这在 Windows/Mac 下是不可能的。我只需要一种重置高度的方法。

最佳答案

树和表的问题相同。 setFont 什么都不做。 树和表有方法 setItemHeight(int itemHeigh) 通过反射,您可以调用此方法(请参阅 https://bugs.eclipse.org/bugs/attachment.cgi?id=220735)

对于表列,您可以在调整单元格大小时添加监听器并通过反射调用此方法(由链接描述):

TableColumn column = new TableColumn(table, SWT.CENTER, i);
column.addListener(SWT.Resize, new Listener() {
    @Override
    public void handleEvent(Event event) {
        int min = 10;
        setItemHeight(table, min);
    }
});

min - 是单元格高度的最小值;

之后,在事件 SWT.MeasureItem 的表监听器中,您可以为单元格设置必要的高度:

table.addListener(SWT.MeasureItem, new Listener() {
      public void handleEvent(Event event) {
        TableItem item = (TableItem)event.item;
                String text = item.getText(event.index);
        Point size = event.gc.textExtent(text);
        event.height = Math.max(event.height, size.y);
    }
}); 

关于java - 更改 SWT 表/树中的行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003632/

相关文章:

c++ - 节点数小于和大于某个节点的节点数

c - 需要帮助创建 maxHeap 函数

algorithm - 如何平树?

swt - 如何在网格布局中设置小部件的行和列?

java - 我们究竟需要如何使用类型转换?

java - 如何在java dsl中设置消息驱动的入站适配器的恢复间隔?

java - Gradle 项目中无法识别的类路径

java - 为什么重载方法的类型提升优先于可变参数

java - 更改字体中的 classcastException

java - SWT、Jface - 为 tableviewer 列有效实现自己的渲染器?