gpt4 book ai didi

java - 是否可以修改 Text swt 小部件换行的方式?

转载 作者:搜寻专家 更新时间:2023-11-01 03:55:52 26 4
gpt4 key购买 nike

开发平台是 Fedora 上的 Eclipse RCP 3.4(它使用 Gtk 原生组件)。我需要避免自动换行。

即:“Hello World”显示为案例 N°1,但我需要案例 N°2。

1|Hello    |    2|Hello Wor|
|World | |ld |

有没有简单的解决办法?

我已经看到 swt 文本句柄是使用 OS.GTK_WRAP_WORD_CHAR 换行模式构建的。我想用 OS.GTK_WRAP_WORDOS.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 的解决方案.

最佳答案

不,我不明白你是怎么做到的。

顺便说一句,即使你可以,将模式设置为 OS.GTK_WRAP_WORD 和 OS.GTK_WRAP_NONE 也不会得到你想要的行为,因为第一个在单词之间换行,就像 OS.GTK_WRAP_WORD_CHAR,第二个根本不换行。您正在寻找的模式是 GTK_WRAP_CHAR。然而,事实是像 OS.GTK_WRAP_CHAR 这样的常量甚至没有在 org.eclipse.swt.internal.gtk.OS 中声明。表明 SWT 的创建者可能反对允许这种行为,即使在理论上也是如此。

关于java - 是否可以修改 Text swt 小部件换行的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5975046/

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