00001 package jpl.util;
00002
00003 import java.awt.Point;
00004 import java.awt.event.ActionEvent;
00005 import java.awt.event.ActionListener;
00006 import javax.swing.JFrame;
00007 import javax.swing.JMenu;
00008 import javax.swing.JMenuItem;
00009 import javax.swing.JPopupMenu;
00010
00011
00012
00013
00014
00015
00016 public class PopupMenuDemo extends JFrame
00017 implements ActionListener {
00018 private static final long serialVersionUID = 1L;
00019
00020 public JPopupMenu popup;
00021 JMenuItem source;
00022 int mi;
00023
00024 public PopupMenuDemo() {
00025
00026
00027
00028
00029
00030 }
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 public boolean search(JPopupMenu p) {
00042 Object[] mes = p.getSubElements();
00043 int i;
00044
00045 for ( i=0 ; i<mes.length ; i++ ) {
00046 if ( mes[i] == source ) {
00047 return true;
00048 }
00049 else
00050 if ( mes[i] instanceof JMenu ) {
00051 if ( search((JPopupMenu)(((JMenu)mes[i]).getSubElements())[0]) ) {
00052 return true;
00053 }
00054 }
00055 else {
00056 mi++;
00057 }
00058 }
00059 return false;
00060 }
00061
00062 public void actionPerformed(ActionEvent e) {
00063 source = (JMenuItem)(e.getSource());
00064
00065
00066 mi = 1;
00067 if ( search(popup) ) {
00068
00069 if ( (new jpl.Query("jpl_popup_demo_callback", new jpl.Term[] {new jpl.Integer(mi)})).hasSolution() ) {
00070
00071 }
00072 else {
00073
00074 }
00075 }
00076
00077 }
00078
00079
00080
00081
00082
00083
00084
00085 public JPopupMenu buildPopupMenu(Object[] mis) {
00086 int i;
00087 JPopupMenu m = new JPopupMenu((String)mis[0]);
00088 JMenuItem mi;
00089
00090 for ( i=1 ; i<mis.length ; i++ ) {
00091 if ( mis[i] instanceof String ) {
00092 mi = new JMenuItem((String)mis[i]);
00093 mi.addActionListener(this);
00094 m.add(mi);
00095 }
00096 else
00097 if ( mis[i] instanceof Object[] ) {
00098 m.add(buildSubMenu((Object[])mis[i]));
00099 }
00100 else {
00101 return null;
00102 }
00103 }
00104 return m;
00105 }
00106
00107 public JMenu buildSubMenu(Object[] mis) {
00108 int i;
00109 JMenu m = new JMenu((String)mis[0]);
00110 JMenuItem mi;
00111
00112 for ( i=1 ; i<mis.length ; i++ ) {
00113 if ( mis[i] instanceof String ) {
00114 mi = new JMenuItem((String)mis[i]);
00115 mi.addActionListener(this);
00116 m.add(mi);
00117 }
00118 else
00119 if ( mis[i] instanceof Object[] ) {
00120 m.add(buildSubMenu((Object[])mis[i]));
00121 }
00122 else {
00123 return null;
00124 }
00125 }
00126 return m;
00127 }
00128
00129 public void showPopup(Object[] mis, int x, int y) {
00130 Point p = getLocationOnScreen();
00131
00132 popup = buildPopupMenu(mis);
00133 setVisible(true);
00134 popup.show(this,x-p.x,y-p.y);
00135 }
00136
00137 }