Java 在另一个ActionListener中使用ActionListener

Java 在另一个ActionListener中使用ActionListener,java,actionlistener,Java,Actionlistener,我想将第一个ActionListener(About)转换为第二个ActionListener(About 2) 如果不把第一个复制到第二个,有什么方法可以做到吗 About.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent ae){ AboutMe.setLocation(470,250); Ab

我想将第一个ActionListener(About)转换为第二个ActionListener(About 2) 如果不把第一个复制到第二个,有什么方法可以做到吗

About.addActionListener(new ActionListener(){
        @Override
       public void actionPerformed(ActionEvent ae){
          AboutMe.setLocation(470,250);
          AboutMe.setSize(400, 200);
          AboutMe.setVisible(true);
          AboutMe.setResizable(false);
          AboutMe.add(panel5);
          panel5.setLayout(null);
          panel5.add(ta);

         ta.setBounds(15, 15, 350, 130);
         ta.setBorder(BorderFactory.createEtchedBorder());
         ta.setText("...................................\n"
                 +  "....................................\n"
                 +  "....................................\n"
                 +  "....................................\n"
                 +  "....................................");
         ta.setEditable(false);
       }
       }
   );



About2.addActionListener(new ActionListener(){
        @Override
       public void actionPerformed(ActionEvent ae){

                  ////////code here///////////////
       }
       }
   );

只要不使用
ActionEvent
参数,就可以在类中创建这样的方法

public void doAction() {
 AboutMe.setLocation(470,250);
          AboutMe.setSize(400, 200);
          AboutMe.setVisible(true);
          AboutMe.setResizable(false);
          AboutMe.add(panel5);
          panel5.setLayout(null);
          panel5.add(ta);

         ta.setBounds(15, 15, 350, 130);
         ta.setBorder(BorderFactory.createEtchedBorder());
         ta.setText("...................................\n"
                 +  "....................................\n"
                 +  "....................................\n"
                 +  "....................................\n"
                 +  "....................................");
         ta.setEditable(false);
}
在您的
actionPerformed
方法中,只需调用

doAction();
那么像这样,

About.addActionListener(new ActionListener(){
        @Override
       public void actionPerformed(ActionEvent ae){
doAction();

   );

这里要做的最简单的事情是将匿名对象的引用复制到temp变量中,并传递该引用

ActionListener temp= new ActionListener(){
        @Override
       public void actionPerformed(ActionEvent ae){
          AboutMe.setLocation(470,250);
          AboutMe.setSize(400, 200);
          AboutMe.setVisible(true);
          AboutMe.setResizable(false);
          AboutMe.add(panel5);
          panel5.setLayout(null);
          panel5.add(ta);

         ta.setBounds(15, 15, 350, 130);
         ta.setBorder(BorderFactory.createEtchedBorder());
         ta.setText("...................................\n"
                 +  "....................................\n"
                 +  "....................................\n"
                 +  "....................................\n"
                 +  "....................................");
         ta.setEditable(false);
       }
       };

About.AddActionListener(temp);
About2.AddActionListener(temp);
另一种选择是让类实现ActionListener,只需执行以下操作:

About.AddActionListener(this)
About2.AddActionListener(this);
虽然你可以按照评论中所说的那样做,但这并不是最好的主意。 另一个选项是创建另一个类来实现ActionListener并创建该类的实例

public class ReusableListener implements ActionListener

ActionListener listener = new ReusableListener() ;//as a field

About.addActionListener(listener) ;
About2.addActionListener(listener) ;

除了让类本身实现ActionListener、维护扩展JFrame的类实现ActionListener、MouseListener、MouseMotionListener、DocumentListener等部分之外,我喜欢这个答案……@RickyClarkson我理解。我也不推荐。我将编辑我的答案。