0

在许多情况下,我碰巧写了一个事件,后来我发现在另一个事件中我一次又一次地重复相同的代码。例如我在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 方法以不再在这里重复相同的代码?如果是怎么办?

4

3 回答 3

3

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

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


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

        ShowWord(ActualWord);
于 2013-07-10T09:37:26.263 回答
1

您不能在MouseListener的方法中调用KeyListener 的方法,因为它们是不同的事件并用于不同的目的,因此您不能将事件转换为,反之亦然。KeyListenerMouseListener

keyPressed()但是您可以在内部 调用 callkeyReleased()例如,因为它们是相同的event


更新

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class EventDemo extends JFrame implements ActionListener,KeyListener{

 private JTextField text;
 private JButton saveButton,cancelButton;
 public EventDemo(){
  JPanel p = new JPanel();
  text = new JTextField("Event Demonstration");
  saveButton = new JButton("SAVE");
  cancelButton = new JButton("CANCEL");
  saveButton.addActionListener(this);
  cancelButton.addActionListener(this);

  text.addKeyListener(this);
  p.add(saveButton);
  p.add(cancelButton);
  p.add(text);
  setDefaultCloseOperation(3);
  getContentPane().add(p,BorderLayout.CENTER);
  setLocationRelativeTo(null);
  setVisible(true);

  pack();
 }


 public void actionPerformed(ActionEvent ev){
  Object source = ev.getSource();
  if(source== saveButton){
    System.out.println("Save button action");
}
  else if(source == cancelButton){
    //do something
    System.out.println("cancel button action");
}
 }

 public void keyPressed(KeyEvent e){
     //see here we called keyEvent method
     keyEvents(e);
    }
    public void keyReleased(KeyEvent e){

   }
   public void keyTyped(KeyEvent e){

   }

 /*
 this method created for key events
 */
 public void keyEvents(KeyEvent e){
  System.out.println(e.getKeyChar());
 }

 public static void main(String...args){
     new EventDemo();
 }
}
于 2013-07-10T09:48:57.617 回答
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);

于 2013-07-10T09:30:24.727 回答