在菜单中显示多个列

时间:2013-01-29 11:31:04

标签: java swt

目前我有一个SWT菜单,如下所示:

enter image description here

我希望箭头对齐(一个在另一个之下)。箭头前的文字并不总是相同。我的第一个想法是将菜单项的字体更改为某些固定字体(例如Courer),然后我可以将箭头移动到最长的文本长度(只需在较短的文本中添加空格)。

但是,根据eclipse forum post,不可能将字体更改为MenuItem。 我的另一个想法是将TableViewer显示为3列作为弹出窗口,但我不知道该怎么做。

任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:0)

最简单的方法是创建一个方法,该方法计算列之间所需的空白空间。您首先需要找出最大的MenuItem文本,然后添加一些空白空间。在你的例子中,将是“some text0 some more text”。它有25个字符。然后你添加空格(让我们以5为例)。所以下一列的偏移应该是30个字符。对于每个MenuItem,您必须添加30 - menuItem.getText().length()个空格。我希望你有我的想法。

编辑: 我没有看到,字体的大小没有固定。

另一种解决方案是在文本中使用\t。我玩了以下示例:

package la.la.la;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;

public class PopupMenuCreate {

    MenuItem fileExitItem, fileSaveItem;
    static MenuItem helpGetHelpItem;
    static MenuItem helpGetHelpItem2;
    static MenuItem helpGetHelpItem3;
    static MenuItem helpGetHelpItem4;
    static MenuItem helpGetHelpItem5;

  public static void main(final String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new GridLayout());

    final Button bn = new Button(shell, SWT.FLAT);
        bn.setText("Right Click HERE to see the popup menu");

        final Menu helpMenu = new Menu(bn);
        final MenuItem newItem = new MenuItem(helpMenu, SWT.CASCADE);
    newItem.setText("New");
        final MenuItem refreshItem = new MenuItem(helpMenu, SWT.NONE);
    refreshItem.setText("Refresh");
        final MenuItem deleteItem = new MenuItem(helpMenu, SWT.NONE);
    deleteItem.setText("Delete");

        helpGetHelpItem = new MenuItem(helpMenu, SWT.PUSH);
        helpGetHelpItem.setText("&Get \tHelp");

        helpGetHelpItem2 = new MenuItem(helpMenu, SWT.PUSH);
        helpGetHelpItem2.setText("&Gets \tHelp");
        helpGetHelpItem3 = new MenuItem(helpMenu, SWT.PUSH);
        helpGetHelpItem3.setText("&Getscccccc \tHdas sdad aasd");
        helpGetHelpItem4 = new MenuItem(helpMenu, SWT.PUSH);
        helpGetHelpItem4.setText("&Getscccccc asd sda \tsasa");
        helpGetHelpItem5 = new MenuItem(helpMenu, SWT.PUSH);
        helpGetHelpItem5.setText("&Getscccccc dsa  ddd asd das asd fdslfdsnjkl nsdjkl nsdjklm fsjkl \tLalalal");

        final Menu newMenu = new Menu(helpMenu);
    newItem.setMenu(newMenu);

    final MenuItem shortcutItem = new MenuItem(newMenu, SWT.NONE);
    shortcutItem.setText("Shortcut");
    final MenuItem iconItem = new MenuItem(newMenu, SWT.NONE);
    iconItem.setText("Icon");

        bn.setMenu(helpMenu);



    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
  }
}

EDIT2:但是这也不起作用......它将文本对齐。