2

我正在开发一个应用程序。

我试图在菜单项单击时调用一个方法,但我不知道如何调用它。

我的菜单代码如下:

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

JMenu mnFile = new JMenu("File");
menuBar.add(mnFile);

JMenuItem mntmLoadImage = new JMenuItem("Load Image");
mnFile.add(mntmLoadImage);

JMenuItem mntmSaveImage = new JMenuItem("Save Image",s.save("/images", ""));
mnFile.add(mntmSaveImage);

JSeparator separator = new JSeparator();
mnFile.add(separator);

JMenuItem mntmExit = new JMenuItem("Exit");
mnFile.add(mntmExit);

JMenu mnEdit = new JMenu("Edit");
menuBar.add(mnEdit);

JMenuItem mntmIncreaseBright = new JMenuItem("Increase Bright");
mnEdit.add(mntmIncreaseBright);

JMenuItem mntmDecreaseBright = new JMenuItem("Decrease Bright");
mnEdit.add(mntmDecreaseBright);

JSeparator separator_1 = new JSeparator();
mnEdit.add(separator_1);

JMenuItem mntmRestoreImage = new JMenuItem("Restore Image");
mnEdit.add(mntmRestoreImage);

JMenu mnHelp = new JMenu("Help");
menuBar.add(mnHelp);

JMenuItem mntmHelpCtrl = new JMenuItem("Help ctrl + K");
mnHelp.add(mntmHelpCtrl);

JMenuItem mntmAboutImageEditor = new JMenuItem("About Image Editor");
mnHelp.add(mntmAboutImageEditor);

JSeparator separator_2 = new JSeparator();
mnHelp.add(separator_2);

JMenuItem mntmAboutCompany = new JMenuItem("About Company");
mnHelp.add(mntmAboutCompany);

我的功能代码如下:

public void save(String path, String name) throws IOException {
    if (scaled != null) {  
        name += scaled.getWidth() + "x" + scaled.getHeight();
        ImageIO.write(scaled, "png", (ImageOutputStream) new File(path + File.separator + name + ".png"));
    } else {
        throw new NullPointerException("Scaled instance is null");
    }
}

我在保存图像菜单项中调用函数,但它显示错误。这里 s 是类的对象,我在其中定义了方法 save。

4

4 回答 4

4
mntmSaveImage.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e){
    // get the path and the name
    save(path, name);
  }
});

也许 aJFileChooser对获取路径和名称很有用,这里有一个小示例 :)

JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
   path = chooser.getSelectedFile().getAbsolutePath();
   name = chooser.getSelectedFile().getName();
}

如果我不说一些错误,parent是你的ContainerJFrame
希望能帮助到你 !

于 2013-08-07T07:27:58.403 回答
2

基本上,aJMenuItem是一种“按钮”

您需要在ActionListenerJMenuItem的 s 中添加一个。当它们被单击或“操作”时,该actionPerformed方法将被调用ActionListener

查看如何使用菜单了解更多详细信息...

于 2013-08-07T07:28:31.780 回答
2

你有:

JMenuItem mntmSaveImage = new JMenuItem("Save Image",s.save("/images", ""));
mnFile.add(mntmSaveImage);

根据JMenuItem文档,双参数构造函数的第二个参数必须是标识键盘快捷键的 int 或 Icon。你都没有通过,所以我不确定你在期待什么。

在任何情况下,您都希望在 JMenuItem 上设置一个 ActionListener 以响应点击:

JMenuItem mntmSaveImage = new JMenuItem("Save Image"); 
mntmSaveImage.addActionListener(new ActionListener() {
    @Override void actionPerformed (ActionEvent e) {
        // perform action (e.g. call save) here.
    }
});
mnFile.add(mntmSaveImage);
于 2013-08-07T07:28:37.577 回答
1

它会是这样的:

MenuItem1.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {

        FunctionName();
    }
});
于 2013-11-21T09:47:32.127 回答