JMileChooser在JMenu问题上

时间:2015-04-01 22:46:47

标签: java swing jfilechooser jmenu

我在JMenu中遇到了JFileChooser的问题。目前我已经设法为背景JLabel设置一个图标,效果很好。但是您只能通过跳过文件夹或使用上层目录按钮来选择文件。如果我尝试使用下拉菜单选择像桌面这样的目录,例如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();
            }
        }
    });
}
}

我已经尝试了一段时间的设置,但是在选择下拉菜单时无法弄清楚如何将注意力集中在菜单上。

任何帮助都会很棒。我确定它简单而愚蠢,但我似乎无法找到它。

1 个答案:

答案 0 :(得分:1)

好的,不要将JFileChooser添加到JMenu,而是添加JMenuItem,当触发时,会显示选择器对话框

有关详细信息,请参阅How to Use File Choosers

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