将数组从actionPerformed()发送到另一个类

时间:2013-07-25 01:01:43

标签: java

我在课程actionPerformed()的{​​{1}}方法中进行了计算。结果是两个包含双精度AC[]的数组。如何将其发送到另一个班级D[]

4 个答案:

答案 0 :(得分:1)

你可以通过多种方式实现这一目标。

重要的部分是:

  • 引用B
  • B提供某种方法来接收您要发送的值。我推荐一种某种类型的setter方法

你也可以使用一个基本相同的公共模型,但是BA的公开较少,这使得A更难以对{{1}做顽皮的事情它可能不应该;)

答案 1 :(得分:0)

你有很多方法。正确的一个取决于您使用的对象模型的结构。

但是,您必须了解两个基本概念:

1。什么是“交叉点”。

为了让A的实例(称之为a1)能够与B的实例(b1)进行通信,a1必须有办法“把他的手”放在b1的引用上。一些示例方法是:

  • 每个A获取对B实例的引用作为其构造函数或其他“set”方法的参数,然后将其存储为为此目的而创建的字段。
  • a1b1共享班级C的常见实例。 c可以是a1b1的'父级'(即包含它们),也可以是管理程序中某个流程的“管理员”组件。
  • static \ singleton方式。 B类存储自身的静态实例,允许从程序中的任何位置引用它。

2。什么是所需的通信接口

一个类暴露给其他人的接口应该设计得很好,以实现许多重要的概念,例如:代码的可读性,安全性和“隐藏性”,可靠性等。这也取决于A和{ {1}}存储在同一个包中,或者是彼此的内部类,或者甚至是彼此继承的。

一些标准的沟通方式是:

  • 直接写入权限:B中的字段B被曝光,并允许直接写入其中。这主要是一种不良行为(根据经验,如果不是public,所有字段应至少为protected
  • private方法:set有一个set方法,用于接收计算出的数据,对其进行处理并将其存储在其字段中(或传递给它)。
  • 倾听 - B将计算出的数据存储在自身中,并通过调用其中的适当方法让所有已注册的“侦听器”知道新数据可用。侦听器具有对相关字段的读访问权,或者数据作为参数传递,然后侦听器(A)决定如何处理数据。

答案 2 :(得分:0)

创建一个B类实例,并将计算结果传递给该实例。

这是一个非常基本的问题,一旦你有了一些经验就很容易解决。您可能会发现Object-oriented programming上的wiki很有用。一旦你理解了它就是它强大的东西。

以下是您的一些例子......

public class ClassB{
    double multiplier;
    public ClassB(){
        //this will be called when you create an instance of class B
        //with no arguments. Also called the default constructor, or empty-arg
        //constructor.
        multiplier = 2;
    }
    public void setMultiplier(double value){
        multiplier = value;
    }
    public void calculate(double[] c, double[] d){
        //do nifty stuff, like multiply every value in c and d!
        for(int i=0;i<c.length;i++){
            c[i] *= multiplier;
            d[i] *= multiplier;
        }
    }
}

// and in your class having the action performed method...
//create an instance of class b. This will call the empty-arg constructor.
ClassB classB1 = new ClassB();
ClassB classB2 = new ClassB();
public void actionPerformed(ActionEvent e){
    double[] c1 = new double[10];
    double[] d1 = new double[10];
    double[] c2 = new double[10];
    double[] d2 = new double[10];
    //call classB1 calculate method. This will multiply c1 and d1 by 2,
    //as classb1's multiplier is 2.
    classB1.calculate(c1, d1);
    classB2.setMultiplier(4);
    //call classB2 calculate method. This will multiply c2 and d2 by 4,
    //as classb2's multipler has been set to 4.
    classB2.calculate(c2, d2);
}

这只是面向对象编程可以为您做的一个简单示例。除此之外还有更多要学习的东西,但是你显然刚刚开始我不会压倒你。

答案 3 :(得分:0)

尝试制作两个阵列C&amp; D静态。使这些静态将允许其他类访问它。否则,您应该通过参数将其传递给构造函数。

参数方法:

public class A implements ActionListener{

Array C;
Array D;

Bclass B = new Bclass(C, D);

    public void actionPerformed(){
        //Do stuff to Arrays

    }

}

public class Bclass{

    Bclass(Array C, Array D){
        //This is Constructor...
    }

}

静态方法:

public class A implements ActionListener{

public static Array C;
public static Array D;

    public void actionPerformed(){
        //Do stuff to Arrays

    }

}

public class Bclass{

    Bclass(){
        //This is Constructor...
        A.C().getIndexOf("C-stuff");
        A.D().getIndexOf("D-stuff");
    }

}