弹出菜单在 java 中不起作用?

Popupmenu wont work in java?

我正在构建一个文字处理器程序作为我在学校的 Java class 的作业,当我右键单击我的文本区域时,我很难让弹出菜单工作.我已经构建了弹出菜单,并让我的文本区域监听我的弹出监听器,并且我已经用

覆盖了鼠标按下和鼠标释放功能
class popupframe extends JFrame{
JMenuItem copy;
JMenuItem paste;
JTextArea textarea = new JTextArea();
JPopupMenu pop;
popupframe(){
Container cpane = getContentPane();
setSize(300 , 300);
setLocation(300, 300);
setTitle("Test");
JPopupMenu pop = new JPopupMenu();
copy = new JMenuItem("copy");
paste = new JMenuItem("paste");
textarea = new JTextArea("something goes here", 5, 5);
pop.add(copy);
pop.add(paste);
PopupListener popuplistener = new PopupListener();
textarea.addMouseListener(popuplistener);

}

class PopupListener extends MouseAdapter{
    public void MousePressed(MouseEvent e){
        popit(e);
    }
    public void MouseReleased(MouseEvent e){
        popit(e);
    }
    private void popit(MouseEvent e){
        if(e.isPopupTrigger()){
            pop.show(e.getComponent(), e.getX(), e.getY());
        }
    }
}
}

我不明白为什么它不起作用,但也许我遗漏了一些重要的东西,请帮忙!!非常感谢

@Override 注释添加到您认为重写的方法中...

class PopupListener extends MouseAdapter {

    @Override
    public void MousePressed(MouseEvent e) {
        System.out.println("Pressed");
        popit(e);
    }

    @Override
    public void MouseReleased(MouseEvent e) {
        System.out.println("Pressed");
        popit(e);
    }

你现在会发现编译失败了,但为什么呢?因为 Java 区分大小写,并且按照惯例,方法名称以小写字符开头

你会发现类似...

class PopupListener extends MouseAdapter {

    @Override
    public void mousePressed(MouseEvent e) {
        popit(e);
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        popit(e);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        popit(e);
    }

    private void popit(MouseEvent e) {
        if (e.isPopupTrigger()) {
            pop.show(e.getComponent(), e.getX(), e.getY());
        }
    }
}

效果会更好。但话说回来,你通常会发现

textarea.setComponentPopupMenu(pop);

明显更容易且不易出错(并且不会像您的示例代码那样导致 NullPointerException