好吧,我正在研究一個基於JGraph示例的Eclipse插件。問題是我無法真正的使用「save」方法,下面是程序如何工作: - 我有一個帶有init()方法的DiagramEditor類,我創建一個GraphEditor對象並調用createFrame( )該對象的方法。 - GraphEditor擴展了BasicGraphEditor(它擴展了JPanel),createFrame()方法返回一個JFrame並有一行「frame.setJMenuBar(menuBar)」 - 「menuBar」是一個對象變量,它在BasicGraphEditor中初始化。JPopupMenu getParent()返回null?
直到這裏一切都很酷,問題是與應該保存文件的動作偵聽器。爲了得到圖形我需要獲取GraphEditor組件,所以我做了一個Component component =(Component)e.getSource(),它是傳遞給該動作偵聽器的ActionEvent,並且在那個階段是JMenuItem「save」,然後我得到父類是JPopupMenu,那麼我想要得到那個應該是GraphEdiotor的JPopupMenu的父類,但是我得到一個null。任何想法爲什麼?
這裏的一些源代碼:
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);