我在文本框 ProjectName 旁边的下拉菜单中编写了以下代码。按下该按钮时,将打开一个下拉菜单,其中MenuItem
表示指定位置的每个文件。当用户按下MenuItem
时, ProjectName 中的文本将更改为文件名。
static File file = new File("C:\\GradeCalc\\java\\saves\\");
static File[] listOfFiles = file.listFiles();
Button btn = new Button(Name, SWT.FLAT|SWT.ARROW|SWT.DOWN);
btn.setBounds(280, 50, 20, 20);
btn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
super.widgetSelected(e);
Menu menu = new Menu(Save_Dialog, SWT.POP_UP);
for (int i = 0; i < listOfFiles.length; i++) {
switch(i) {
case 0: MenuItem item1 = new MenuItem (menu, SWT.PUSH);
item1.setText(listOfFiles[0].getName());
item1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ProjectName.setText(listOfFiles[0].getName());
}});
break;
case 1: MenuItem item2 = new MenuItem (menu, SWT.PUSH);
item2.setText(listOfFiles[1].getName());
item2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ProjectName.setText(listOfFiles[1].getName());
}});
break;
case 2: MenuItem item3 = new MenuItem (menu, SWT.PUSH);
item3.setText(listOfFiles[2].getName());
item3.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ProjectName.setText(listOfFiles[2].getName());
}});
break;
case 3: MenuItem item4 = new MenuItem (menu, SWT.PUSH);
item4.setText(listOfFiles[3].getName());
item4.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ProjectName.setText(listOfFiles[3].getName());
}});
break;
case 4: MenuItem item5 = new MenuItem (menu, SWT.PUSH);
item5.setText(listOfFiles[4].getName());
item5.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ProjectName.setText(listOfFiles[4].getName());
}});
break;
}
}
Point pt = Save_Dialog.getLocation();
menu.setLocation(pt.x + 280, pt.y + 100);
menu.setVisible(true);
}});
代码正常运行,但创建的MenuItems
数取决于switch
语句中的个案数。如果位置中有更多文件,则下拉菜单将不包含该位置中所有文件的名称。
所以这是我的问题。如何为位置中的每个文件创建MenuItem
,而不依赖于switch
语句中的个案数或任何其他硬编码值?
答案 0 :(得分:1)
不太清楚为什么你需要switch
,因为你可以动态地创建MenuItem
:
public static void main(String[] args)
{
final Display display = Display.getDefault();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Menu bar = new Menu(shell, SWT.BAR);
shell.setMenuBar(bar);
MenuItem fileItem = new MenuItem(bar, SWT.CASCADE);
fileItem.setText("&File");
Menu submenu = new Menu(shell, SWT.DROP_DOWN);
fileItem.setMenu(submenu);
File dir = new File("C:\\");
for (File file : dir.listFiles())
{
if (file.isFile())
{
MenuItem item = new MenuItem(submenu, SWT.NONE);
item.setText(file.getName());
}
}
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
}
在我的案例中看起来像这样: