简体   繁体   中英

Popupmenu wont work in java?

i am constructing a word processor program as an assignment for my Java class in school and i am having a really hard time getting the popupmenu to work when i right click on my text area. I have already constructed the popup menu and have my textarea listening to my popuplistener and i have overridden the mouse pressed and mouse released functions with

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());
        }
    }
}
}

I cannot see why it is not working but perhaps i am missing something crucial, please help!! much appreciated

Add the @Override annotation to the methods you think your are overriding...

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);
    }

You will now find that this fails to compile, but why? Because Java is case sensitive, and by convention, method names start with a lower case character

You'll find that something like...

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());
        }
    }
}

will work better. But having said that, you'll generally find

textarea.setComponentPopupMenu(pop);

significantly easier and less error prone (and it won't cause a NullPointerException like your example code will.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM