目前我有一个SWT菜单,如下所示:
我希望箭头对齐(一个在另一个之下)。箭头前的文字并不总是相同。我的第一个想法是将菜单项的字体更改为某些固定字体(例如Courer),然后我可以将箭头移动到最长的文本长度(只需在较短的文本中添加空格)。
但是,根据eclipse forum post,不可能将字体更改为MenuItem。 我的另一个想法是将TableViewer显示为3列作为弹出窗口,但我不知道该怎么做。
任何想法都表示赞赏。
答案 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:但是这也不起作用......它将文本对齐。