微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Mac上的SWT树 – ‘源列表’

我正在实现SWT Java应用程序的OS X版本的视图,并希望在我的SWT树中使用NSOutlineView提供的“源列表”选项.

我通过将此代码添加到#createHandle()方法来破解我自己的Tree.class版本来实现这一点:

long NSTableViewSelectionHighlightStyleSourceList = 1;
long hi = OS.sel_registerName("setSelectionHighlightStyle:");
OS.objc_msgSend(widget.id, hi, NSTableViewSelectionHighlightStyleSourceList);

这基本上只是标记底层NSOutlineView以使用NSTableViewSelectionHighlightStyleSourceList样式.

它看起来像这样:

哪种工作,但不完全模拟NSOutlineView行为.例如,在选择根节点时,即使标题有足够的空间,它仍然会截断它,如下所示:

一个问题是我不知道如何实现类别(或组/文件夹),就像你在Finder.app/iTunes.app/Mail.app/中看到的那样:以下示例:

请注意FAVORITES类别及其格式.这是在常规的ObjC应用程序中通过在outlineView委托中的outlineView:isGroupItem方法中返回true来处理的,但我不知道在哪里破解它.

所以我的问题是

如何在OS X上的SWT中实现类别(isGroupItem)功能

解决方法:

我设法对SWT java源代码和本机源进行调整,以使其工作,如下图所示.

mac cocoa x86_64的自定义SWT可以是dowloaded here.

当时对源的更改可以在commit中看到

显示其工作原理的片段如下所示. SWT.soURCE_LIST样式用于将树标记为源列表,SWT.GROUP_ITEM样式用于标记作为组项的项.

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;

public class SourceList {

    public static void main(String[] args) {
        display display = new display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());

        final Tree tree = new Tree (shell, SWT.soURCE_LIST);

        for (int i=0; i<4; i++) {
            final TreeItem iItem = new TreeItem (tree, SWT.GROUP_ITEM);
            display.asyncExec( new Runnable() {
                public void run() {
                    iItem.setExpanded(true);
                }
            });
            iItem.setText ("GROUP " + i);
            for (int j = 0; j < 4; j++) {
                TreeItem jItem = new TreeItem (iItem, 0);
                jItem.setText ("TreeItem " + j);
            }
        }

        shell.open();
        while (!shell.isdisposed()) {
            if (!display.readAnddispatch())
                display.sleep();
        }
        display.dispose();
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐