我在使用Ubuntu Linux / Gnome时出现了一个问题,但似乎不在Windows上(如答案之一所示),在创建新标签时,我不能同时使用SWT.RIGHT | SWT.WRAP
来使两者文本右对齐且可包装。
背景:
我在向导中使用了一个简单的2列网格布局,以创建动态数量的行,每行带有一个标签和一个文本字段。我希望标签的大小固定,并且其中的文本右对齐,如下所示:
label 1: [Text field 1]
Another label: [Text field 2]
Another label
with wrapped [Text field 3]
text:
网格布局的创建如下:
GridLayout gl = new GridLayout();
gl.numColumns = 2;
composite.setLayout(gl);
这就是我尝试创建行(每行具有一个标签和一个文本字段)的方式:
for (String labelText : labelTexts) {
Label fieldLabel = new Label(this.composite, SWT.RIGHT | SWT.WRAP | SWT.BORDER );
fieldLabel.setText(labelText);
GridData labelGridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
labelGridData.widthHint = 160;
fieldLabel.setLayoutData(labelGridData);
Text textField = new Text(this.composite, SWT.BORDER);
GridData textGridData = new GridData(GridData.FILL_HORIZONTAL);
textGridData.horizontalAlignment = GridData.HORIZONTAL_ALIGN_BEGINNING;
textGridData.widthHint = 248;
textField.setLayoutData(textGridData);
}
问题是这部分:上面的
SWT.RIGHT | SWT.WRAP
,因为不能同时使用它们。那么,如何解决这个问题,并同时使标签中的文本右对齐,并使文本换行? 最佳答案
简短答案:
使用StyledText代替Label-所有事物都相等。
详细答案:
关于此“功能”,GTK中存在许多错误(120256是一个很好的入口点),其中大多数标记为彼此重复,大多数回溯到gtk + 2.4 / 2.6,有些标记为已修复。但是,在2011年gtk2 +版本2.22(针对Maverick Market)中,错误似乎具有显着的弹性。
阅读了该错误报告后,我为wordwrap关键字弄乱了整个SWT源代码树,看起来Steve Northover的男孩们通过StyledText控件比使用Label控件更好地解决了该错误。
我重用了Favonius测试用例(很多Favonius ;-),这显然是个好兆头。
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class RightAlign2
{
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
shell.setLayout(layout);
shell.setText("Alignment Test");
String[] labelTexts = new String[]{"label 1:","Another label:","Another label with wrapped text:"};
for (String labelText : labelTexts)
{
StyledText fieldText = new StyledText(shell, SWT.RIGHT |SWT.WRAP | SWT.BORDER );
fieldText.setText(labelText);
GridData labelGridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
labelGridData.widthHint = 100;
fieldText.setLayoutData(labelGridData);
Text textField = new Text(shell, SWT.BORDER);
GridData textGridData = new GridData(GridData.FILL_HORIZONTAL);
textGridData.horizontalAlignment = GridData.HORIZONTAL_ALIGN_BEGINNING;
textGridData.widthHint = 248;
textField.setLayoutData(textGridData);
}
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}
关于java - 同时在Linux/Gnome中将文本右对齐并包装在SWT标签中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5014765/