The trick here is not to extend JFrame to create the menubar, rather use the one created by Processing for the sketch.
This will not work with P2D and P3D because they use OpenGL so the sketch is shown in a GLWindow not a JFrame
Menu_bar mp;
void setup() {
buildMenuBar();
}
void draw() {
}
void buildMenuBar() {
mp = new Menu_bar(this, "Media", 100, 100);
}
Menubar tab
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Menu_bar {
JFrame frame;
public Menu_bar(PApplet app, String name, int width, int height) {
System.setProperty("apple.laf.useScreenMenuBar", "true");
frame = (JFrame) ((processing.awt.PSurfaceAWT.SmoothCanvas)app.getSurface().getNative()).getFrame();
frame.setTitle(name);
// Creates a menubar for a JFrame
JMenuBar menu_bar = new JMenuBar();
// Add the menubar to the frame
frame.setJMenuBar(menu_bar);
// Define and add two drop down menu to the menubar
JMenu import_menu = new JMenu("import");
JMenu text_menu = new JMenu("text");
JMenu shape_menu = new JMenu("shape");
JMenu image_menu = new JMenu("image");
JMenu video_menu = new JMenu("video");
menu_bar.add(import_menu);
menu_bar.add(text_menu);
menu_bar.add(shape_menu);
menu_bar.add(image_menu);
menu_bar.add(video_menu);
// Create and add simple menu item to one of the drop down menu
JMenuItem new_file = new JMenuItem("Import file");
JMenuItem new_folder = new JMenuItem("Import folder");
JMenuItem action_exit = new JMenuItem("Exit");
import_menu.add(new_file);
import_menu.add(new_folder);
import_menu.addSeparator();
import_menu.add(action_exit);
// Add a listener to the New menu item. actionPerformed() method will
// invoked, if user triggred this menu item
new_file.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("You have clicked on the new action");
}
}
);
frame.setVisible(true);
}