gpt4 book ai didi

java - Mac 上的 SWT 树 - 'Source list'

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:50 28 4
gpt4 key购买 nike

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

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

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

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

看起来像这样:

source list

哪种方法有效,但不能完全模拟 NSOutlineView 的行为。例如,在选择根节点时,即使标题有足够的空间,它仍然会像这样截断它:

source list with truncated title

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

Finder.app example

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

所以我的问题是

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

最佳答案

我设法对 SWT java 源代码和 native 源代码进行了调整,使其正常工作,如下图所示。

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();
}

}

关于java - Mac 上的 SWT 树 - 'Source list',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999317/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com