开发平台是Fedora上的Eclipse RCP 3.4(它使用的是Gtk本机组件)。我需要避免换行。
即:“Hello World”显示为N°1,但我需要N°2的情况。
1|Hello | 2|Hello Wor|
|World | |ld |
有简单的解决方案吗?
我已经看到swt Text句柄是用OS.GTK_WRAP_WORD_CHAR
换行模式构建的。我想用OS.GTK_WRAP_WORD
或OS.GTK_WRAP_NONE
之类的常量测试行为,但我不知道如何执行这个奇迹?是否可以通过编程方式修改特定于平台的配置?
编辑1 - 我的一位同事提出了一个解决方案:
import org.eclipse.swt.SWT;
import org.eclipse.swt.internal.gtk.OS;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class SampleGrabExcess {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout());
shell.setSize(70, 70);
GridData gridData = new GridData();
Text addressText = new Text(shell, SWT.BORDER | SWT.MULTI) {
@Override
protected void checkSubclass() {}
@Override
protected void checkWidget() {
OS.gtk_text_view_set_wrap_mode(handle, 1);
super.checkWidget();
}
};
gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.verticalAlignment = SWT.FILL;
gridData.grabExcessVerticalSpace = true;
addressText.setLayoutData(gridData);
addressText.setText("Hello World.");
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
结果是预期的。我正在寻找http://dev.eclipse.org的解决方案。
答案 0 :(得分:0)
不,我不知道你怎么能这样做。
顺便说一句,即使你可以,将模式设置为OS.GTK_WRAP_WORD和OS.GTK_WRAP_NONE也不会得到你想要的行为,因为第一个会破坏单词之间的界限,就像OS.GTK_WRAP_WORD_CHAR和第二个一样。根本不打破线。您正在寻找的模式是GTK_WRAP_CHAR。但是,在org.eclipse.swt.internal.gtk.OS中甚至没有声明OS.GTK_WRAP_CHAR之类的常量这一事实表明SWT的创建者可能反对允许这种行为,即使在理论上也是如此。