问题:我需要一个具有可变行高的SWT表(JFace TableViewer).事实上,我在我的开发机器(运行Ubuntu 10.10)上解决了这个问题.不幸的是,这在Windows和Mac上都不起作用.
最初,我以为我没有正确使用这些库.但到现在为止,我担心我想要做的事情在Windows上根本不可能.我希望有人能说服我.
重现:我没有在这里提供我的代码,而是构建了一个简单的程序来重现问题.我从以下Snipplet开始:
我修改了update()方法,为目录生成两行文本,为文件生成一行(模拟具有可变行高的环境):
...
if (file.isDirectory()) {
cell.setText(styledString.toString() + "\n"
+ styledString.toString());
cell.setImage(IMAGE1);
} else {
cell.setImage(IMAGE2);
}
...
这在Linux上可以正常工作,但在Windows上,所有行都具有相同的高度.具体来说,只能看到一行.
接下来,我试图通过使measure()更加智能来帮助SWT.所以我重写了measure(),如下所示:
protected void measure(Event event, Object element) {
if (((File) element).isDirectory()) {
event.height = 32;
} else {
event.height = 16;
}
super.measure(event, element);
}
结果:所有行都具有高度32.再次,这在Linux上按预期工作.
我担心,在Windows上,所有行都必须是相同的高度.这对我来说是一个显而易见的事.任何人都可以证实这一点,甚至更好,提供一种解决方法吗?
谢谢!
我使用TableViewer两列.第一个应该包含文本,第二个应该包含取决于对象状态的图像.标签提供程序是一个扩展LabelProvider和实现的自定义提供程序ITableLayoutProvider.
如果未显示图像,则布局正确,第一列中的文本与左侧对齐.

但是当显示至少一个图像时,第一列中的文本在右侧和中间之间的某处对齐 - 看起来有点难看.

布局很简单:
availableDevicesList = new TableViewer(this, SWT.SINGLE | SWT.BORDER
| SWT.FULL_SELECTION);
availableDevicesList.setContentProvider(new ArrayContentProvider());
Table table = availableDevicesList.getTable();
TableLayout tableLayout = new TableLayout();
table.setLayout(tableLayout);
table.setLinesVisible(true);
tableLayout.addColumnData(new ColumnWeightData(3));
new TableColumn(table, SWT.LEFT);
tableLayout.addColumnData(new ColumnWeightData(1));
new TableColumn(table, SWT.RIGHT);
Run Code Online (Sandbox Code Playgroud)
是什么导致这个问题?
我已经通过http://download.eclipse.org/releases/juno更新站点在Eclipse 3.8上安装了插件开发环境 .现在,在"插件依赖关系"树下的PDE项目中,我看到所有PDE JAR都将源集连接到相同的JAR.然而,JAR不包含任何源 - 仅包含类文件.
因此,我看不到PDE/JFace类的Javadoc,并且为自动生成的代码获得了难看的arg0,arg1等.
我在哪里以及如何获得PDE/JFace的源代码或Javadoc?
我有一组API来执行文件操作,例如 saveToFile(CustomObject objectToSave);
由于文件操作可能很长,我决定应该向用户显示某些指示,例如进度条.
我读了一下ProgressMonitorDialog,所以我尝试了,但它并不完全正常,因为我需要(或者更好,我不知道如何正确使用它).
目前我这样做:
ProgressMonitorDialog progressDialog = new ProgressMonitorDialog(theShell);
try {
progressDialog.run(false, true, new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
monitor.beginTask("Saving your data", 100);
try {
Utils.saveToFile(objectToSave);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
monitor.done();
}
});
Run Code Online (Sandbox Code Playgroud)
这段代码非常快速地显示了一个进度对话框,但问题是在较慢的PC上这会堆叠直到Utils.saveToFile返回,而我不知道如何在保存完成之前指示中间进程.
我找到了一个提到的线程,IProgressMonitor.UNKNOWN但它没有说明在monitor期间发生的事情performRead(_fileName, monitor);
我该如何解决这个问题?
我目前想要编写一个基于JFace的Eclipse编辑器TreeViewer.我添加了一个CellLabelProvider到TreeViewer.如果我直接在粗体字体的update方法中设置单元格的CellLabelProvider字体,则标签显示为粗体.
但我只希望标签的一部分显示为粗体.所以我将StyleRanges应用于单元格.'StyleRange的选定颜色完美无缺,但将a的字体设置StyleRange为粗体,似乎不起作用.
为什么这样,我该如何解决?
按钮单击以打开FileDialog Box并选择要在特定标签上显示的任何图像.
我尝试使用Label控件中的选定图像设置绝对路径或相对路径,但不能动态正常工作.
所以请帮我解决问题.
org.eclipse.swt.widgets.Text类的默认上下文菜单非常丰富,包含了用户依赖的功能......

但是,只要我使用Control.setMenu()分配我自己的上下文菜单,所有这些丰富性就会消失.有没有将自己的MenuItem对象到这个系统创建菜单的方式.我可以有我的蛋糕和吃吗?
你的线索总是非常受欢迎.
M.
我有一个使用Scrollable Composite的应用程序窗口.
在可滚动的复合内部,我们可以有N个复合(相应的数据库数据).
我怎样才能检测到儿童复合材料的大小来设置正确的高度?
/**
* Create contents of the application window.
* @param parent
*/
@Override
protected Control createContents(Composite parent) {
final ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.BORDER);
final Composite containerEditarAtendimento = new Composite(sc, SWT.BORDER);
containerEditarAtendimento.setSize(800, 630);
sc.setContent(containerEditarAtendimento);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.setMinSize(containerEditarAtendimento.computeSize(820, 480));
GridLayout gridLayout = new GridLayout(1, false);
gridLayout.marginTop = 5;
gridLayout.marginRight = 5;
gridLayout.marginBottom = 5;
gridLayout.marginLeft = 5;
containerEditarAtendimento.setLayout(gridLayout);
{ // Composite com as informações de atendimento.
EditarAtendimentoComposite editarAtendimentoComposite = new EditarAtendimentoComposite(containerEditarAtendimento, SWT.BORDER);
GridData gd_editarAtendimentoComposite …Run Code Online (Sandbox Code Playgroud) 我在SWT / JFace技术方面还很陌生,但发现了一个令我抓狂的问题。在Eclipse RCP应用程序中,我有一个视图,其中放置了带有JFace TreeViewer的SWT树,该JFace TreeViewer通过标签提供程序提供标签和图标。根据客户的要求,树的背景颜色为深蓝色,字体颜色为白色。当选择了节点时,这种颜色组合会导致节点文本的可视化效果不佳,文本不适合树形区域,并且我们将鼠标指针放在节点上。以某种方式出现“本机突出显示”。可以在下图中显示。

另一方面,当未选择将鼠标放在其上的节点时,不会发生此问题。突出显示会更改字体的颜色以使其更加可见。可以在下图中显示。

经过一些研究,我发现通过为SWT.EraseItem事件添加侦听器,我可以修改所选节点的背景颜色,然后禁用选择。这使我可以定义自己的选择背景样式,还可以禁用的SWT.SELECTED标记,以event.detail在未选择节点时强制OS突出显示。
private final class EraseItemListener implements Listener {
public void handleEvent(Event event) {
// Only perform the node highlight when it is selected.
if ((event.detail & SWT.SELECTED) == SWT.SELECTED) {
// Modify background, emulate Windows highlighting.
...
// Set Windows that we do not want to draw this item as a selection (we have already highlighted the item in our way).
event.detail &= ~SWT.SELECTED;
} …Run Code Online (Sandbox Code Playgroud) OSX的文件快速预览小部件.基本上,在Mac上,当您选择文件并按空格键时,您可以快速预览该文件.我正在尝试使用SWT + JFace(mmmaybe JavaFX)复制该功能.
这Shell对我来说很合适.

预览小部件将APPLICATION_MODAL Shell附加到StructuredViewer.
Shell每次打开预览时我都不想重新创建.我只想隐藏它.这应该是一个快速预览.
我希望能够关闭这个Shell上ESC和SPACE.
我处理许多类型的文件(PDF,JPEG,PNG,TXT等),因此每个文件都有自己的预览组件.该Shell知道如何将这些组件之间进行切换.
此组件可能无法修改任何文件,只需预览它们即可.我用来构建预览的组件是另一个故事.
由于Shell有直接的孩子,这些孩子可能会"偷"焦点并抓住KeyEvents.因此,Shell不知道如何关闭键盘事件.
我不想添加Display过滤器.每次显示/隐藏时,我都必须添加/删除它们Shell.另外,这些是非常危险的,因为它是一个巨大的RCP应用程序,它可能会影响其他工作台部件(如果由于某种原因没有删除过滤器).
在下面的示例中,您可以观察到一旦Text具有焦点,Shell就无法抓回焦点,并且不会再将键事件泵入其中.
/**
*
* @author ggrec
*
*/
public class SSCCE_ShellWithShellParent
{
// ==================== 1. Static Fields ========================
private static final int CHILD_SHELL_STYLE = SWT.BORDER | SWT.RESIZE | SWT.TITLE | …Run Code Online (Sandbox Code Playgroud) jface ×10
swt ×9
java ×6
eclipse-rcp ×5
eclipse ×2
alignment ×1
filedialog ×1
image ×1
javafx ×1
tableviewer ×1
treeviewer ×1