当前位置: 技术问答>java相关
◎◎◎◎为什么我的Japplet上的JPopupMenu的MenuItem无法响应??◎◎◎◎◎
来源: 互联网 发布时间:2015-05-07
本文导语: 目的是在applet上实现一个popup的菜单,其中菜单项单击后展开链接。 public class Topol extends JApplet{ public void init(){ contentPane = getContentPane(); contentPane.addMouseListener(new MouseAdapter(){ ...
目的是在applet上实现一个popup的菜单,其中菜单项单击后展开链接。
public class Topol extends JApplet{
public void init(){
contentPane = getContentPane();
contentPane.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
System.out.println("detected mouse mousePressed event!");
showpopup(e);
}
public void mouseClicked(MouseEvent e){
System.out.println("detected mouse mouseClicked event!");
showpopup(e);
}
public void mouseReleased(MouseEvent e){
System.out.println("detected mouse mouseReleased event!");
showpopup(e);
}
});
bearerbox_menu = new JPopupMenu();
JMenuItem bb_MenuItem[] = new JMenuItem[6];
bb_MenuItem[0] = new JMenuItem("item1");
bb_MenuItem[1] = new JMenuItem("item2");
...
bb_MenuItem[0].addMenuKeyListener(new myMenuKeyAdaptor());
~~~~~~~~~~~~~~~~~~~~~~~~~~~问题可能就是这里
.......
}
void showpopup(MouseEvent e){
bearerbox_menu.setLocation(cenx + imgwt/2,ceny + imght/2);
bearerbox_menu.show(e.getComponent(),e.getX(),e.getY());
System.out.println("@@@@@@bearerbox_node menu popuped@@@@@@@@@@");
}
}
class myMenuKeyAdaptor implements MenuKeyListener {
public myMenuKeyAdaptor() {
System.out.println"######################################");
}
public void menuKeyTyped(MenuKeyEvent e){
System.out.println"#########################################");
}
public void menuKeyPressed(MenuKeyEvent e){
System.out.println"##########################################"); }
public void menuKeyReleased(MenuKeyEvent e){
System.out.println"##########################################")
}
......
}
现在的问题是popupmenu弹出正常,但是其中item被pressed或者typed等事件仍处理为contentPane的mouseClick事件,就是bb_MenuItem[0].addMenuKeyListener(new myMenuKeyAdaptor());一句似乎没有执行成功(但是也没有异常抛出)。
给JMenuItem添加的Listener还有什么比MenuKeyListener更合适的呢?ft!
可是这个接口就是没有把事件diepatch成功!我哭!!!!!!!!!!谁来救救我阿。。。。。。。
public class Topol extends JApplet{
public void init(){
contentPane = getContentPane();
contentPane.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
System.out.println("detected mouse mousePressed event!");
showpopup(e);
}
public void mouseClicked(MouseEvent e){
System.out.println("detected mouse mouseClicked event!");
showpopup(e);
}
public void mouseReleased(MouseEvent e){
System.out.println("detected mouse mouseReleased event!");
showpopup(e);
}
});
bearerbox_menu = new JPopupMenu();
JMenuItem bb_MenuItem[] = new JMenuItem[6];
bb_MenuItem[0] = new JMenuItem("item1");
bb_MenuItem[1] = new JMenuItem("item2");
...
bb_MenuItem[0].addMenuKeyListener(new myMenuKeyAdaptor());
~~~~~~~~~~~~~~~~~~~~~~~~~~~问题可能就是这里
.......
}
void showpopup(MouseEvent e){
bearerbox_menu.setLocation(cenx + imgwt/2,ceny + imght/2);
bearerbox_menu.show(e.getComponent(),e.getX(),e.getY());
System.out.println("@@@@@@bearerbox_node menu popuped@@@@@@@@@@");
}
}
class myMenuKeyAdaptor implements MenuKeyListener {
public myMenuKeyAdaptor() {
System.out.println"######################################");
}
public void menuKeyTyped(MenuKeyEvent e){
System.out.println"#########################################");
}
public void menuKeyPressed(MenuKeyEvent e){
System.out.println"##########################################"); }
public void menuKeyReleased(MenuKeyEvent e){
System.out.println"##########################################")
}
......
}
现在的问题是popupmenu弹出正常,但是其中item被pressed或者typed等事件仍处理为contentPane的mouseClick事件,就是bb_MenuItem[0].addMenuKeyListener(new myMenuKeyAdaptor());一句似乎没有执行成功(但是也没有异常抛出)。
给JMenuItem添加的Listener还有什么比MenuKeyListener更合适的呢?ft!
可是这个接口就是没有把事件diepatch成功!我哭!!!!!!!!!!谁来救救我阿。。。。。。。
|
不要急,听我的.
直接的new JMenuItem("item1");是无法响应事件的.
如果你希望POPUPMENU中的项响应事件,你需要做几个COMPONENT,然后将这些作为POPUPMENU的ADD参数,如下例:
private class RefreshAction extends AbstractAction{
public RefreshAction(){
super("刷新所选类别");
}
public void actionPerformed(ActionEvent e){
showStatus("正在刷新所选类别... ...");
reloadCategoryNode(selectedCategory);
showStatus("所选类别已刷新");
}
}
bearerbox_menu.add(RefreshAction);
这样就可以了,试试
直接的new JMenuItem("item1");是无法响应事件的.
如果你希望POPUPMENU中的项响应事件,你需要做几个COMPONENT,然后将这些作为POPUPMENU的ADD参数,如下例:
private class RefreshAction extends AbstractAction{
public RefreshAction(){
super("刷新所选类别");
}
public void actionPerformed(ActionEvent e){
showStatus("正在刷新所选类别... ...");
reloadCategoryNode(selectedCategory);
showStatus("所选类别已刷新");
}
}
bearerbox_menu.add(RefreshAction);
这样就可以了,试试
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。