代码之家  ›  专栏  ›  技术社区  ›  Mateusz Dymczyk

jpoppumenu getParent()是否返回null?

  •  1
  • Mateusz Dymczyk  · 技术社区  · 16 年前

    好的,我正在开发一个基于JGraph示例的Eclipse插件。问题是我真的无法让“save”方法工作,以下是程序的工作原理: -我有一个带有init()方法的DiagramEditor类,其中我创建了一个GraphEditor对象并调用该对象的createFrame()方法。 -GraphEditor扩展了BasicGraphEditor(它扩展了JPanel),createFrame()方法返回一个JFrame,并有一行“frame.setJMenuBar(menuBar)”

    在这里一切都很酷之前,问题在于应该保存文件的动作侦听器。为了得到这个图,我需要得到grapherEditor组件,所以我做了一个component component=(component)e.getSource(),它是传递给那个动作监听器的ActionEvent,在这个阶段是JMenuItem“save”,然后我得到了父级,它是jpopmenu,然后我想得到jpopmenu的父级,它应该是grapherEditor,但是我得到了一个空值。知道为什么吗?

    以下是一些源代码:

        DiagramEditor.java:
    
        @Override
    public void init(IEditorSite site, IEditorInput input)
            throws PartInitException {
        setSite(site);
        setInput(input);
        this.diagram = ((DiagramEditorInput)input).getDiagram();
        setPartName(this.diagram.getName());
    
        gEditor = new GraphEditor();
        gEditor.createFrame().setVisible(true);
    }
    
        BasicGraphEditor.java:
    
        public JFrame createFrame()
    {
        JFrame frame = new JFrame();
        frame.getContentPane().add(this);
        frame.setJMenuBar(menuBar);
        //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(870, 640);
        return frame;
    }
    
        In the constructor:
    
        menuBar = new JMenuBar();
    
        menu = new JMenu("File");
        menu.setMnemonic(KeyEvent.VK_F);
        menuBar.add(menu);
    
        JMenuItem openMenuItem = new JMenuItem("Open", KeyEvent.VK_O);
        // ADD FILE OPENING
        //openMenuItem.addActionListener(menuListener);
        menu.add(openMenuItem);
    
    
        JMenuItem saveMenuItem = new JMenuItem("Save", new ImageIcon("/images/save.gif"));
        saveMenuItem.setMnemonic(KeyEvent.VK_S);
        saveMenuItem.addActionListener( new SaveAction(false) );
        menu.add(saveMenuItem);
       // menu.add(new SaveAction(false));
    
        JMenuItem saveMenuItemAs = new JMenuItem("SaveAs", new ImageIcon("/images/saveas.gif"));
        //saveMenuItemAs.setMnemonic(KeyEvent.VK_S);
        saveMenuItemAs.addActionListener( new SaveAction(true) );
        menu.add(saveMenuItemAs);
        //menu.add(new SaveAction(true));       
    
        JMenuItem closeMenuItem = new JMenuItem("Close", KeyEvent.VK_C);
        closeMenuItem.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        System.exit(0);
                    }
                }
        );
        menu.add(closeMenuItem);
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Paul Jowett    16 年前

    如果在GraphEdtior类中定义SaveAction类,如下所示:

    class SaveAction extends AbstractAction
    {
            public void actionPerformed(ActionEvent e) {
                GraphEditor myGE = GraphEditor.this;
    
                .. do whatever 
            }
    }
    

    如果您的SaveAction类定义为 static

    class SaveAction extends AbstractAction
    {
        private GraphEditor graphEditor;
        private boolean myBoolean;
    
        public SaveAction(GraphEditor graphEditor, boolean myBoolean)
        {
            this.myBoolean = myBoolean;
            this.graphEditor = graphEditor;
        }
    
            public void actionPerformed(ActionEvent e) {
    
                this.graphEditor....
                .. do whatever 
            }
    }
    

    在这两种情况下,saveAction中的actionPerformed()都可以访问grapherEditor来执行所需的操作。

    推荐文章