有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在另一个类中使用ActionListener

我正在清理我的代码。我读到我把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) 个答案

  1. # 1 楼答案

    一个很好的方法是使用回调机制

    我在这里发布了一个同样的答案

    JFrame in separate class, what about the ActionListener?


    --编辑--

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

  2. # 2 楼答案

    创建一个新类,如下所示:

     ButtonAction implements actionListner
    {
      //put the code above here
    }
    
  3. # 3 楼答案

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

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

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

  4. # 4 楼答案

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

    具有通用/可重用功能的类应该独立存在。只要它们是针对特定用途的,这就不是一个坏习惯(一点也不!)把它们放在离使用它们的地方尽可能近的地方。我可以想象setSize方法不是类的公共接口的一部分,因此ActionListener只是将事件耦合到特定类的“粘合剂”

    在这种情况下,你可以创建一条“微小”的胶水线:

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