在另一个事件方法中调用事件方法

时间:2013-07-10 09:24:34

标签: java events methods

在很多情况下我碰巧写了一个事件,后来我发现在另一个事件中我一次又一次地重复相同的代码。例如,我在mouuseclick中有这段代码:

Text_1.addMouseListener(new org.eclipse.swt.events.MouseListener() {
        public void mouseDown(MouseEvent e) {
            if(Highlighted)
                //UnHighlightWords();
            SetActualWord();
            selectedWord=ActualWord;
            fetchWord(ActualWord);

            DisplayData.label_translation.setText(String.valueOf(ActualWord.getSurahNumber()));

            ShowWord(ActualWord);

        }

我将再次举行像这样的按键事件:

Text_1.addKeyListener(new org.eclipse.swt.events.KeyListener(){

        public void keyPressed(KeyEvent e) {
                             // ******recall Mousedown event*******
            }
        }

是否可以在Keypressed中调用Mousedown方法,以便在此处不再重复相同的代码?如果是的话怎么样?

3 个答案:

答案 0 :(得分:2)

只需将所有这些代码(您已在鼠标事件中调用它)放在一个单独的方法中,并在需要时调用该方法

        if(Highlighted)
            //UnHighlightWords();
        SetActualWord();
        selectedWord=ActualWord;
        fetchWord(ActualWord);


        DisplayData.label_translation.setText(String.valueOf(ActualWord.getSurahNumber()));

        ShowWord(ActualWord);

答案 1 :(得分:1)

简单。首先获取对象的引用(这是匿名类的实例:

//I'll import the class for readability
import org.eclipse.swt.events.KeyListener;
//snip

//Do this line ***OUTSIDE*** the method, and in the class body!
MouseListener ml=new MouseListener(){
    void mouseClicked(MouseEvent e){
        //Do something
    }
    //All the other methods as well
}
KeyListener kl=new KeyListener(){

    public void keyPressed(KeyEvent e) {
            ml.mouseClicked(new MouseEvent(Component source, ...)); //edit this part as needed
        }
}
Text_1.addKeyListener(kl);

您现在可以根据需要重复使用kl。您也可以通过执行kl.keyPressed(KeyEvent e);

手动调用所述侦听器

答案 2 :(得分:1)

您无法在 MouseListener 的方法中调用 KeyListener的方法,因为它们是不同的事件并用于不同的目的,因此您无法转换{ {1}}事件发送到KeyListener,反之亦然。

但您可以在MouseListener内拨打电话keyPressed(),因为它们是相同的事件


<强>更新

keyReleased()