本文介紹了在Linux/Gnome中同時右對齊和換行SWT標(biāo)簽中的文本的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我有一個問題,在使用Ubuntu Linux/Gnome時出現(xiàn),但似乎不是在Windows上(如其中一個答案所示),在創(chuàng)建新標(biāo)簽時,我無法同時使用SWT.RIGHT | SWT.WRAP
,以便使文本右對齊和可換行。
背景:
我在向?qū)е惺褂昧艘粋€簡單的2列網(wǎng)格布局,以創(chuàng)建動態(tài)數(shù)量的行數(shù),每行有一個標(biāo)簽和一個文本字段。我希望標(biāo)簽具有固定的大小,并使其中的文本右對齊,如下所示:
label 1: [Text field 1]
Another label: [Text field 2]
Another label
with wrapped [Text field 3]
text:
網(wǎng)格布局的創(chuàng)建方式如下:
GridLayout gl = new GridLayout();
gl.numColumns = 2;
composite.setLayout(gl);
這是我嘗試創(chuàng)建行的方式(每行有一個標(biāo)簽和一個文本字段):
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
部分,因為同時使用它們不起作用。那么,我如何才能繞過這一點,同時將標(biāo)簽中的文本右對齊,并使文本換行?
推薦答案
簡短回答:
使用StyledText而不是標(biāo)簽-所有條件相同。
詳細(xì)答案:
GTK中有許多關(guān)于此”特性”的錯誤(120256是一個很好的切入點),其中大多數(shù)錯誤標(biāo)記為彼此重復(fù),大多數(shù)錯誤標(biāo)記為GTK+2.4/2.6,有些錯誤標(biāo)記為已修復(fù)。然而,在2011年的gtk2+版本2.22(針對Maverick Market)中,錯誤似乎具有極強的彈性。
讀完這篇錯誤報告后,我在整個SWT源代碼樹中搜索WordWrap關(guān)鍵字,看起來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();
}
}
這篇關(guān)于在Linux/Gnome中同時右對齊和換行SWT標(biāo)簽中的文本的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,