java - 在 Linux/Gnome 中同时右对齐和换行 SWT 标签中的文本

标签 java eclipse swt

我在使用 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如上所述,因为同时使用它们是行不通的。那么我怎样才能解决这个问题,同时右对齐标签中的文本,并使文本换行呢?

最佳答案

我尝试在我的 Vista 机器上使用 eclipse 3.6 重现该问题。但这对我有用。

这是输出:

enter image description here

我使用的代码如下:

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class RightAlign 
{
    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) 
        {
            Label  fieldLabel = new Label(shell,  SWT.RIGHT |SWT.WRAP | SWT.BORDER );
            fieldLabel.setText(labelText);
            GridData labelGridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
            labelGridData.widthHint = 100;
            fieldLabel.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();

    }
}

更改的唯一内容是 labelGridData.widthHint来自160100 。最长的标签是 < 160因此没有被包裹。

关于java - 在 Linux/Gnome 中同时右对齐和换行 SWT 标签中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5014765/

相关文章:

java - Tess4J 非法状态异常 : Input not set

java - ANTLR4 Swift 语法无法识别 for-in 语句

java - Windows 7 似乎破坏了 SWT Control.print(GC)

java - 如何在 TreeViewer 中的第二列中展开列

java - 是否有用于添加或删除 SWT Combo 项目的监听器?

java - Android,接受用户的值并在下一个 Activity 中显示它们

带有 ActionListeners 的 Java 作用域

java - 当鼠标不在窗口上方时,如何在不卡住的情况下对 UI 进行动画处理?

java - 访问Tomcat中的相关文件

eclipse - 分组大纲节点