그래, JGraph 예제를 기반으로 Eclipse 플러그인을 만들고있다. 문제는 내가 실제로 "저장"방법을 사용할 수 없다는 것입니다. 여기에 프로그램이 어떻게 작동하는지 간단히 알려 드리겠습니다. - 나는 GraphEditor 객체를 만들고 createFrame() 메소드를 호출하는 init() 메서드로 DiagramEditor 클래스를 가지고 있습니다.) 그 대상의 메드도. - GraphEditor는 JPanel을 확장 한 BasicGraphEditor를 확장하고, createFrame() 메서드는 JFrame을 반환하고 "frame.setJMenuBar (menuBar)"행을 사용합니다. - "menuBar"는 BasicGraphEditor에서 초기화되는 객체 변수입니다.JPopupMenu getParent()는 null을 반환합니까?
여기까지 모든 것이 멋지다. 문제는 파일을 저장해야하는 작업 수신기 때문입니다. 그래프를 얻으려면 GraphEditor 구성 요소를 가져와야합니다. 그래서 Component 구성 요소 = (Component) e.getSource() whitch는 해당 동작 수신기에 전달 된 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);