2015-04-01 48 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