2013-11-21 20 views
0

我已經爲下一個文本框的下拉菜單編寫了以下代碼片段,ProjectName。按下該按鈕後,將會打開一個下拉菜單,其中MenuItem用於指定位置中的每個文件。當用戶按下MenuItem中的文字時,ProjectName將被更改爲文件的名稱。將文件數組轉換爲多個MenuItems

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語句或任何其他硬編碼值中的個案數?

回答

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

看起來這在我的情況:

enter image description here

+0

非常感謝你。你的代碼工作完美。我使用了'switch'語句,因爲我想爲'File []'中的每個文件創建一個MenuItem,並且不確定如何動態創建MenuItems。我知道它可以完成,但我不確定如何。再次感謝您的幫助。 – JavaCodeBuilder

+0

@JayCodeBuilder不客氣。 – Baz