因功能需求,现要在一个窗体的文本区中加入一个鼠标监听,实现这个功能,就是当你用鼠标在文本区中左击时,不做任何响应,而右击则出现来一系列类似菜单项的下拉列表,下拉列表中有剪切.复制等之类的菜单项,当选择其中一项时,又能响应相应的操作!请问各大侠这个功能用代码如何实现?先在这里谢谢各位大侠了!

解决方案 »

  1.   

    awt里面的鼠标右击事件写一个就行
      

  2.   

    我这里有点代码 是关于 右击出弹出菜单的也许会给你点启示:
    这个是我想要写一个播放器的时候其中一点代码。
    /** getPlayerPanel() 方法你可以想象成你的文本区域
     *  getPMenu() 就是定义返回一个弹出菜单
     */
    /**
     * 返回Component,作为播放窗口 
     * @return Component
     */
    private Component getPlayerPanel() {
    // TODO Auto-generated method stub
    if(playerpanel==null)
    {
    playerpanel=new PlayerPanel(new BorderLayout());
    playerpanel.add(getPMenu());
    playerpanel.setBackground(Color.BLACK);
    playerpanel.addMouseListener(new MouseAdapter()
    {
    public void mouseClicked(MouseEvent evt) {
                if (evt.getButton()==MouseEvent.BUTTON1) {//左键单击
                    if(player.getState()==Player.Started)
                     player.stop();
                    if(player.getState()!=Player.Started)
                     player.start();
                }
                /*if((evt.getModifiers()&InputEvent.BUTTON3_MASK)!=0)//右击,同下面的代码作用一样,都能实现弹出菜单的弹出。
                {
                 getPMenu().show(evt.getComponent(), evt.getX(), evt.getY());
                }*/
                if (evt.getButton()==MouseEvent.BUTTON3) {//右击
                 getPMenu().show(evt.getComponent(), evt.getX(), evt.getY());
                }
    }
    });//MouseListener.mouseClicked(MouseEvent.MOUSE_CLICKED)
    }
    return playerpanel;
    }
    /**
     * 实现能够在组件中的指定位置动态弹出的菜单。
     * @return PopupMenu
     * */
    private PopupMenu getPMenu()
    {
    if(pmenu==null)
    {
    pmenu=new PopupMenu("控制");
    MenuItem pmplay=new MenuItem("播放");
    MenuItem pmpause=new MenuItem("暂停");
    MenuItem psilence=new MenuItem("静音");
    pmenu.add(pmplay);
    pmplay.addActionListener(this);
    pmenu.add(pmpause);
    pmpause.addActionListener(this);
    pmenu.add(psilence);
    psilence.addActionListener(this);
    }
    return pmenu;
    }
      

  3.   

    下面是我做一个播放器的时候其中一段代码,你可以看一下
    第一个方法是一个播放
    第二个方法是返回一个弹出菜单的方法
    /**
     * 返回Component,作为播放窗口 
     * @return Component
     */
    private Component getPlayerPanel() {
    // TODO Auto-generated method stub
    if(playerpanel==null)
    {
    playerpanel=new PlayerPanel(new BorderLayout());
    playerpanel.add(getPMenu());
    playerpanel.setBackground(Color.BLACK);
    playerpanel.addMouseListener(new MouseAdapter()
    {
    public void mouseClicked(MouseEvent evt) {

                /*if((evt.getModifiers()&InputEvent.BUTTON3_MASK)!=0)//右击,同下面的代码作用一样,都能实现弹出菜单的弹出。
                {
                 getPMenu().show(evt.getComponent(), evt.getX(), evt.getY());
                }*/
                if (evt.getButton()==MouseEvent.BUTTON3) {//右击
                 getPMenu().show(evt.getComponent(), evt.getX(), evt.getY());
                }
    }
    });//MouseListener.mouseClicked(MouseEvent.MOUSE_CLICKED)
    }
    return playerpanel;
    }
    /**
     * 实现能够在组件中的指定位置动态弹出的菜单。
     * @return PopupMenu
     * */
    private PopupMenu getPMenu()
    {
    if(pmenu==null)
    {
    pmenu=new PopupMenu("控制");
    MenuItem pmplay=new MenuItem("播放");
    MenuItem pmpause=new MenuItem("暂停");
    MenuItem psilence=new MenuItem("静音");
    pmenu.add(pmplay);
    pmplay.addActionListener(this);
    pmenu.add(pmpause);
    pmpause.addActionListener(this);
    pmenu.add(psilence);
    psilence.addActionListener(this);
    }
    return pmenu;
    }
      

  4.   

    这个很简单啊,思路就是,创建一个鼠标监听事件,判断用户是否是单击了右键,如果是,那么事件处理程序:利用popup,来在鼠标位置填出一个菜单,里面包含你需要的东西,然后为每个项,诸如黏贴,复制等等再创建鼠标事件。
    看看api,就会了~~~~~~
      

  5.   


    楼上这位大侠,要是用的是swing组件呢,那怎么办,里面没有PopupJMenu啥整呢?
      

  6.   

    做一个JPopupMenu,然后设置到要添加的组件上
    不需要显示添加监听动作
      

  7.   

    http://hi.baidu.com/wzbg/blog/item/2318eebfa071540b18d81f57.html
    这个就是讲复制黏贴的,就是你 要找的