2015-04-01 45 views
1

我遇到JMenu中的JFileChooser問題。目前我已經把它設置爲背景JLabel的圖標,它很好用。但是您只能從跳過文件夾或使用上層目錄按鈕中選擇文件。如果我嘗試使用下拉菜單選擇桌面之類的目錄,例如JMenu的焦點就會消失,JFileChooser也會消失,剩下的就是下拉菜單。只要你點擊任何目錄,下拉菜單也會消失,不做任何事情(不選擇目錄)。JMenu中的JFileChooser問題

這是我的代碼到目前爲止:編輯更改爲測試代碼,以便您可以看到自己的問題。

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JMenuBar; 
import javax.swing.JMenu; 
import javax.swing.JFileChooser; 

public class test { 
private JFrame frame; 

public test() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 686, 462); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    JMenuBar menuBar = new JMenuBar(); 
    frame.setJMenuBar(menuBar); 

    JMenu mntest = new JMenu("test"); 
    menuBar.add(mntest); 

    JFileChooser fileChooser = new JFileChooser(); 
    mntest.add(fileChooser); 

} 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       test window = new test(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 
} 

我試着設置搞亂了一段時間,但現在無法弄清楚如何保持專注在菜單上,同時選擇下拉菜單。

任何幫助將是偉大的。我確定這是簡單而愚蠢的,但我似乎無法找到它。

+0

How to Use File Choosers通常你使用' JFileChooser#showOpenDialog'或等價物。考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它可以證明你的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的混淆和更好的反應 – MadProgrammer 2015-04-01 22:56:25

+0

代碼已更新感謝提示=) – wardas23 2015-04-01 23:15:25

回答

2

好,不添加JFileChooserJMenu,相反,加JMenuItem其中,觸發時,顯示挑肥揀瘦對話框

更多細節

import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 

public class Test { 

    private JFrame frame; 

    public Test() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 686, 462); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JMenuBar menuBar = new JMenuBar(); 
     frame.setJMenuBar(menuBar); 

     JMenu mntest = new JMenu("test"); 
     menuBar.add(mntest); 
     JMenuItem mi = new JMenuItem("Open..."); 
     mntest.add(mi); 

     mi.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser fileChooser = new JFileChooser(); 
       switch (fileChooser.showOpenDialog(frame)) { 
        case JFileChooser.APPROVE_OPTION: 
         // Open file... 
         break; 
       } 
      } 
     }); 

    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Test window = new Test(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
} 
+0

感謝您的幫助,我想我可能必須這樣做,我只是喜歡它的菜單的外觀和感覺,但從來沒有想過 – wardas23 2015-04-01 23:44:27

+0

問題是,一旦菜單損失集中,它就會關閉:P – MadProgrammer 2015-04-01 23:49:22

+0

是的,我希望有一種方法可以將注意力集中在多個方面。但是,這樣做的效果並不好看:P – wardas23 2015-04-02 00:12:26