import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;class Srpopmenu extends JFrame implements ActionListener, MouseListener
{
    private static final long serialVersionUID = 2262184115394670248L;  //这里做什么用的?    private JTextArea srm = new JTextArea();    private JPopupMenu pm = new JPopupMenu();    private JMenuItem item1 = new JMenuItem("复制");    private JMenuItem item2 = new JMenuItem("剪切");    private JMenuItem item3 = new JMenuItem("粘贴");    public Srpopmenu()
    {
        setTitle("弹出式菜单");
        setSize(300, 200);
        setLocationRelativeTo(null);                     //?
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //?
        add(srm);
        srm.add(pm);
        pm.add(item1);
        pm.add(item2);
        pm.add(item3);
        item1.addActionListener(this);  //这里为什么用this,而不用以前的new ActionListener非常不解中
        item2.addActionListener(this);
        item3.addActionListener(this);
        srm.addMouseListener(this);
        setVisible(true);
    }    public void actionPerformed(ActionEvent e)
    {
        System.out.println(((JMenuItem)e.getSource()).getText());
    }    public void mouseReleased(MouseEvent e)
    {
        if(e.isPopupTrigger())
        {
            pm.show(srm, e.getX(), e.getY());    //这里e.getX()有这个方法吗?
        }
    }
    
    public void mouseClicked(MouseEvent e)
    {}    public void mouseEntered(MouseEvent e)
    {}    public void mouseExited(MouseEvent e)
    {}    public void mousePressed(MouseEvent e)
    {}    public static void main(String args[])
    {
        new Srpopmenu();
    }
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【sure2003】截止到2008-07-13 07:01:31的历史汇总数据(不包括此帖):
    发帖的总数量:225                      发帖的总分数:9763                     每贴平均分数:43                       
    回帖的总数量:186                      得分贴总数量:4                        回帖的得分率:2%                       
    结贴的总数量:223                      结贴的总分数:9727                     
    无满意结贴数:2                        无满意结贴分:50                       
    未结的帖子数:2                        未结的总分数:36                       
    结贴的百分比:99.11 %               结分的百分比:99.63 %                  
    无满意结贴率:0.90  %               无满意结分率:0.51  %                  
    值得尊敬
      

  2.   

    private static final long serialVersionUID = 2262184115394670248L;  
    这个随机字符串用来标识版本,2个类有相同的UI几率很低的。在序列化和反序列化时有用。
    item1.addActionListener(this);因为你自己就实现了接口啊!
    class Srpopmenu extends JFrame implements ActionListener, MouseListener
    既然自己就可以做,何必再雇佣一个呢?
      

  3.   

    private static final long serialVersionUID = 2262184115394670248L;  //这里做什么用的?
    这个是标识该类的数字 item1.addActionListener(this);  //这里为什么用this,而不用以前的new ActionListener非常不解中
    这个是注册事件处理监听器,就是将item1的事件处理委托给this进行处理。
    不能创建的原因有2个:
    1、在构造方法内部创建自己的对象会导致死循环
    2、每个类都有默认的创建好的对象this,不需要再创建了
      

  4.   

    通过MouseEvent对象的getX、getY方法可以获取鼠标位置坐标
      

  5.   

     pm.show(srm, e.getX(), e.getY());    //这里e.getX()有这个方法吗?
    这个看下API 应该是获得事件的坐标
      

  6.   

    LZ在开玩笑吧,鼠标按下是个事件,按下位置的xy坐标用getX、getY获取。
    this代表当前的实例化对象,如果用new...,就得用新的实例化对象,一般没什么关系,在极特殊情况下(如需要在事件处理方法中访问当前对象的变量)必须用this。
    serialVersionUID是对象串行化时用的唯一ID。
      

  7.   

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JFrame;
    import javax.swing.JMenuItem;
    import javax.swing.JPopupMenu;
    import javax.swing.JTextArea;
    public /*为什么不是公有的*/ class Srpopmenu
    extends JFrame implements ActionListener, MouseListener {  //此类本身实现了动作和鼠标事件监听器接口 //序列化版本ID,如果不使用序列化和反序列化那这个不是必须的
    private static final long serialVersionUID = 2262184115394670248L; private JTextArea srm = new JTextArea();
    private JPopupMenu pm = new JPopupMenu();
    private JMenuItem item1 = new JMenuItem("复制");
    private JMenuItem item2 = new JMenuItem("剪切");
    private JMenuItem item3 = new JMenuItem("粘贴"); public Srpopmenu() {
    setTitle("弹出式菜单");
    setSize(300, 200);
    setLocationRelativeTo(null); // ?
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ?
    add(srm);
    srm.add(pm);
    pm.add(item1);
    pm.add(item2);
    pm.add(item3);
    //当你的这个构造方法执行时已经接近创建 Srpopmenu 对象的尾声了,而这个 Srpopmenu 对象
    //自己已经实现了 ActionListener, MouseListener 这两个接口,提供了处理这两类事件的能力
    //所以可以将自身的引用作为事件监听器添加给本窗口自己。
    item1.addActionListener(this);
    item2.addActionListener(this);
    item3.addActionListener(this);
    srm.addMouseListener(this);
    setVisible(true);
    } public void actionPerformed(ActionEvent e) {
    System.out.println(((JMenuItem)e.getSource()).getText());
    } public void mouseReleased(MouseEvent e) {
    if (e.isPopupTrigger()) {
    //获取鼠标键被放开时鼠标指针在产生此事件的组件(也叫事件源)上的XY坐标
    pm.show(srm, e.getX(), e.getY());
    }
    } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public static void main(String args[]) {
    new Srpopmenu();
    }}