如何在另一个类中使用ActionListener

时间:2014-03-30 11:52:56

标签: java swing actionlistener code-cleanup

我正在清理我的代码。我读到我把ActionListener放到另一个类是更好的。这就是我做的。

但是在我的ActionListener中,除了代码中的某些点外,一切都有效,我得到了setSize(xx,xx)。我以前工作过,因为它在同一个班级。但不是了。我尝试了多种解决方案,但我无法理解。

ActionListener

public class ActionFrame implements ActionListener{

public void actionPerformed(ActionEvent e){
    Object src = e.getSource();

    if(src == Frame.Console_Bouton){
        System.out.println("Bouton console");
        if(getSize().getWidth() >= 750){
            /** If True (Retirer) */
            for(int i = 1090; i > 689; i--){
                setSize(i, 490);
                System.out.println("Rétractation du Frame");
            }
        }else{
            /** If False (Etirer) */
            for(int i = 689; i < 1090; i++){
                setSize(i, 490);
                System.out.println("Etirage du Frame");
            }
        }

            }

            ...

至于错误,没有,它只会冻结程序。

4 个答案:

答案 0 :(得分:2)

猜测:可能这种情况下提取ActionListener 是一个好主意,因为它使用了对象的private方法。

具有通用/可重用功能的类应该独立使用。只要它们是用于特定用途,实践(根本不是!)只是将它们尽可能地靠近它们使用的地方。我可以想象你的setSize方法不是你班级的一部分&#39;公共界面,因此ActionListener仅仅是“胶水”。将活动与特定班级结合。

在这种情况下,你会创建一个小小的&#39;胶水线:

abstract class ActionAdapter implements ActionListener {
}
...
frame.Console_Bouton.addActionListener(
    new ActionAdapter(){ // anonymous inner class 
      void actionPerformed(ActionEvent e){
         ... // (no need to check source!)
      }
    });

答案 1 :(得分:1)

创建一个新类:

 ButtonAction implements actionListner
{
  //put the code above here
}

答案 2 :(得分:0)

这样做的好方法是使用回调机制

我已在此处的相同背景中发布了答案

  

JFrame in separate class, what about the ActionListener?


- 编辑 -

ActionEvent获取源代码然后找到它的父级(如果需要,获取父级的父级,直到获得需要重新调整大小的所需组件)并在其上调用setSize()

答案 3 :(得分:-1)

  1. 在控制器中创建View的实例

  2. setSize(xx,yy)方法的访问修饰符从private更改为public

  3. setSize中的actionPerformed()替换为view.setSize(xx,yy)