Skip to content

Instantly share code, notes, and snippets.

@usbharu
Created July 9, 2020 12:10
Show Gist options
  • Save usbharu/e0f9a75956fe042950aacd13c6e1b2d5 to your computer and use it in GitHub Desktop.
Save usbharu/e0f9a75956fe042950aacd13c6e1b2d5 to your computer and use it in GitHub Desktop.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.InputEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.JPopupMenu; //多分いらんやつあるけど許して。
public class Menu implements MouseListener{
JFrame frame;
JPopupMenu popup;
public Menu(PApplet app){
System.setProperty("apple.laf.useScreenMenuBar", "true"); //アップル系のOSで使うやつだと思う。
frame = (JFrame) ((processing.awt.PSurfaceAWT.SmoothCanvas)app.getSurface().getNative()).getFrame();
JMenuBar menu_bar = new JMenuBar();
frame.setJMenuBar(menu_bar);
JMenu import_menu = new JMenu("インポート(I)");
JMenu edit_menu = new JMenu("編集(E)");
menu_bar.add(import_menu);
menu_bar.add(edit_menu);
import_menu.setMnemonic(KeyEvent.VK_I); //ショートカットキーを設定この場合だとalt+Iになる。
edit_menu.setMnemonic(KeyEvent.VK_E);
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);
JMenuItem copy = new JMenuItem("コピー");
edit_menu.add(copy);
action_exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_DOWN_MASK)); //ショートカットキーを設定この場合だとctrl+q
frame.setVisible(true); //多分おまじない
popup = new JPopupMenu();
JMenuItem import_item = new JMenuItem("import");
JMenuItem import_item2 = new JMenuItem("import folder");
popup.add(import_item);
popup.add(import_item2);
import_item.addActionListener(new ActionListener() { //import_itemがクリックされたときにこいつを呼び出す。以下同
public void actionPerformed(ActionEvent arg0) {
println("import");
}});
import_item2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
println("import folder");
}});
action_exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("You have clicked on the new action");
exit();
}});
}
private void showPopup(MouseEvent e){
if (e.isPopupTrigger()) {
popup.show(e.getComponent(), e.getX(), e.getY()); //マウスの座標にメニューを表示
}
}
@Override
public void mouseClicked(MouseEvent e) {} //これがないとエラーが出たはず
@Override
public void mouseEntered(MouseEvent e) {} //以下同じ
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) { //クリックされたらshowPopupを呼び出す。下も同じ
showPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
showPopup(e);
}
}
Menu p;
void setup(){
size(500,200);
Component component = (Component) this.surface.getNative(); //クラスの中でMouseEventを使うおまじない
component.addMouseListener(new Menu(this));
p = new Menu(this);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment