我有一个SWT树(通过JFace TreeViewer),它在列中显示项,其中一些列有长字符串。对于用户来说,字符串的结尾是有意义的位,而不是开始,所以当文本被剪裁时,我希望剪裁发生在字符串的开头,而不是结尾。示例:
|This is a very l...|
|... the tree column|
我用一个定制的PaintItem侦听器解决了这个问题,如下所述:http://www.eclipse.org/articles/article.php?file=article-customdrawingtableandtreeitems/index.html
提出了以下代码(不是很完美,里面有一些重复和神奇的数字):
tree.addListener(SWT.EraseItem, new Listener()
{
public void handleEvent(Event event)
{
String text = ((TreeItem)event.item).getText(event.index);
Point size = event.gc.textExtent(text);
TreeColumn column = ((Tree)event.widget).getColumn(event.index);
int columnWidth = column.getWidth() - 10; /* magic number alert - the cells have some padding - must be a way of determining this... */
if(size.x > columnWidth)
{
event.detail &= ~SWT.FOREGROUND;
}
}
});
tree.addListener(SWT.PaintItem, new Listener()
{
@Override
public void handleEvent(Event event)
{
String text = ((TreeItem)event.item).getText(event.index);
Point size = event.gc.textExtent(text);
TreeColumn column = ((Tree)event.widget).getColumn(event.index);
int columnWidth = column.getWidth() - 10; /* magic number alert - the cells have some padding - must be a way of determining this... */
if(size.x > columnWidth)
{
drawTextTail(event, text, columnWidth);
}
}
private void drawTextTail(Event event, String text, int columnWidth)
{
String clippedText = "";
int offset = text.length() - 1;
String nextClippedText = text.charAt(offset) + clippedText;
while(fits(nextClippedText, columnWidth, event.gc))
{
clippedText = nextClippedText;
offset--;
nextClippedText = text.charAt(offset) + clippedText;
}
event.gc.drawText("..." + clippedText,
event.x + 5, /* magic number alert - the cells have some padding - must be a way of determining this... */
event.y, false);
}
private boolean fits(String clippedText, int columnWidth, GC gc)
{
Point size = gc.textExtent("..." + clippedText);
return size.x < columnWidth;
}
});
试试这个。第二列自动将字符串
裁剪到该列中。
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Tree tree = new Tree(shell, SWT.NONE);
tree.setLayout(new FillLayout());
tree.setHeaderVisible(true);
TreeColumn column = new TreeColumn(tree, SWT.NONE);
column.pack();
column.setWidth(100);
TreeColumn column2 = new TreeColumn(tree, SWT.NONE);
column2.pack();
column2.setWidth(100);
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setText(0, "Baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz");
item.setText(1, "VERY VERY VERY VERY VERY VERY VERY VERY VERY VERY VERY long text");
final TextLayout textLayout = new TextLayout(display);
tree.addListener(SWT.PaintItem, new Listener() {
public void handleEvent(Event event) {
TreeItem item = (TreeItem) event.item;
Point pt = new Point(event.x + 2, event.y + 2);
for (int i = 0; i < tree.getColumnCount(); i++) {
Rectangle rect = item.getBounds(i);
String text = item.getText(i);
if (rect.contains(pt)) {
String clippedText = "";
int offset = text.length() - 1;
int columnWidth = tree.getColumn(i).getWidth();
String nextClippedText = text.charAt(offset) + clippedText;
while(fits(nextClippedText, columnWidth, event.gc) && offset >= 0)
{
clippedText = nextClippedText;
offset--;
if(offset >= 0)
nextClippedText = text.charAt(offset) + clippedText;
}
textLayout.setText(clippedText);
textLayout.draw(event.gc, event.x + 3, event.y + 3);
}
}
}
});
tree.addListener(SWT.EraseItem, new Listener() {
public void handleEvent(Event event) {
/*
* indicate that we'll be drawing the foreground in the
* PaintItem listener
*/
event.detail &= ~SWT.FOREGROUND;
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
private static boolean fits(String clippedText, int columnWidth, GC gc)
{
Point size = gc.textExtent("..." + clippedText);
return size.x < columnWidth;
}
它可能需要一些修复来真正显示...
在裁剪的字符串
前面,但这只是一个开始。
我遇到了一个棘手的问题。 在摆动环境中,有一个功能在AWT组件中可用文本区域。但是,这在 JFace 或 Swing 环境中都不存在。 有人想出解决办法吗?我必须自己制作界面吗? 提前谢谢
GNU nano是Unix系统下一款常用的文本编辑器,以简单易用著称。与之相比,功能更强大的Vi和Emacs编辑器,学习曲线比nano陡峭很多。由于nano对于一般的文本编辑来说已经足够,所以我想简单介绍一下,以便于更好入门。 基本使用 在Shell中输入下面命令,就可以启动nano: nano test.txt 命令nano后面跟着想要修改的文件名。如果当前文件夹下存在名为test.txt的文件
1.1、什么是云剪辑 目睹云云剪辑,顾名思义就是云端处理视频的工具。他大大解放了生成工具的限制,可以随时随地的开启一段视频的剪辑工作。 目前对于视频制作有以下几个难点: 第一,相对图文模式,视频的制作门槛高。需要更专业、更具审美观的视频剪辑人员,花费更长的时间和精力来产出内容。 第二,市面上绝大部分视频制作软件操作复杂,生产内容效率低下,无法实现人工智能化。即使是非常资深的视频剪辑师,生产1分钟的
我是SWT/JFace技术的新手,我发现了一个让我发疯的问题。在Eclipse RCP应用程序中,我有一个视图,其中放置了一个带有JFace TreeViewer的SWT树,该树通过标签提供程序提供标签和图标。根据客户要求,树的背景颜色为深蓝色,字体颜色为白色。当节点被选中时,这种颜色的组合导致节点文本的可视化效果不佳,文本不适合树区域,我们将鼠标指针放在节点上。不知何故出现了“本地高亮显示”。这
问题内容: 我有这个HTML: 使用此CSS: 我正在应用的背景图像是200x100像素,但我只想显示200x50像素的背景图像的裁剪部分。 似乎不是正确的CSS属性。我该怎么用呢? 不应使用,因为我在Sprite上下文中使用了上述CSS,在该Sprite上下文中,我要显示的图像部分小于定义CSS的元素。 问题答案: 您可以将图形放置在具有其自身尺寸上下文的伪元素中: 浏览器支持很好,但是如果需要