【问题标题】:Make .asm files in a folder as JMenuItems and add them to a JMenu, add ActionListener Events将文件夹中的 .asm 文件作为 JMenuItems 并将它们添加到 JMenu,添加 ActionListener 事件
【发布时间】:2013-11-05 13:10:15
【问题描述】:

假设我有一个名为 examples/basics/ 的文件夹 在那个文件夹中,我有一堆 .asm 文件。我现在想做的是将这些文件自动制作成 JMenuItems,不带 .asm 扩展名,放置在 JMenu 中并添加动作监听器,执行以下操作:

用户点击生成的 JMenuItem。假设创建了一个新的 CodeArea 对象,并且文件 examples/basics/what I clikced on 作为新文件传入。

如何用最简单的方法实现?

【问题讨论】:

  • 你有什么问题,不清楚。您不能迭代文件夹中的所有文件并动态创建菜单吗?或者您不能创建从路径创建新的FileActionListener
  • 读取该目录中具有正确扩展名的所有文件名,并将它们存储在数组或列表中。遍历该列表并使用当前名称在每次迭代中创建一个 menuItem 并将其添加到您的 menuBar 并添加一个 actionListener。
  • 如何进行读取循环?

标签: java swing file jmenu jmenuitem


【解决方案1】:

用于您的目的的简单示例:

    JFrame frame = new JFrame();
    frame.setSize(400,400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JMenuBar menu = new JMenuBar();
    frame.setJMenuBar(menu);

    JMenu mainMenu = new JMenu("Menu");
    menu.add(mainMenu);

    File f = new File(PATH_TO_FOLDER);
    if(f.exists()){
        File[] listFiles = f.listFiles();
        for(File file : listFiles){
            if(file.getAbsolutePath().endsWith(EXTENSION)){
                final JMenuItem m = new JMenuItem(file.getName());
                mainMenu.add(m);
                m.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        System.out.println(m.toString());
                    }
                });
            }
        }
    }

    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

这里 PATH_TO_FOLDER 是包含文件的文件夹的路径

EXTENSION 是菜单文件的目标扩展名

【讨论】:

  • 也许吧,但我更喜欢为按钮使用单独的监听器,并使用相同的代码装饰作为方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
相关资源
最近更新 更多