1

最初のActionListener(About)を2番目のActionListener(About2)にコピーせずに、最初のActionListener(About)を2番目のActionListener(About2)に使用したいのですが、それを行う方法はありますか?

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

2 に答える 2

2

ここで行う最も簡単なことは、その匿名オブジェクトの参照を一時変数にコピーして、その参照を渡すことです。

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

もう1つのオプションは、クラスに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) ;
于 2012-10-17T11:19:39.263 に答える
1

引数を使用しない限り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();

   );
于 2012-10-17T11:16:12.557 に答える