0

我为文本框ProjectName旁边的下拉菜单编写了以下代码。按下按钮时,将打开一个下拉菜单,其中MenuItem包含指定位置的每个文件。当用户按下ProjectNameMenuItem中的文本时,将更改为文件的名称。

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语句中的案例数量或任何其他硬编码值的情况下为该位置的每个文件创建一个?

4

1 回答 1

1

不太清楚为什么在switch这里需要 a ,因为您可以MenuItem动态创建 s :

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();
        }
    }
}

在我的情况下看起来像这样:

在此处输入图像描述

于 2013-11-21T16:34:21.227 回答