使用事件处理程序更改对象参数

时间:2012-07-19 04:01:59

标签: java

我正在尝试创建一个对象并将其添加到我创建的数组中,作为我构造的参数GUI对象。出于某种原因,我一直在 TheDates无法解析为变量

正在构建的对象:

public static void main(String[] args)
{
    DateDriver myDateFrame = new DateDriver();
}

//Constructor
public DateDriver()
{
    outputFrame = new JFrame();
    outputFrame.setSize(600, 500);
    outputFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    String command;
    Date [] theDates = new Date[100];    //this is the array I am having issues with
    int month, day, year;

    ...
}

这是我在日期的问题所在:

public void actionPerformed(ActionEvent e) 
{    //The meat and Potatoes
     if ( e.getSource() == arg3Ctor) 
     {
        JOptionPane.showMessageDialog(null, "3 arg Constructor got it");
        int month = Integer.parseInt(monthField.getText());
        int day = Integer.parseInt(dayField.getText());
        int year = Integer.parseInt(yearField.getText());
        theDates[getIndex()] = new Date(month, day, year);//here is the actual issue
     }
}

我不知道我是在思考它还是在想什么,我已经尝试过制作数组静态,公共等等。我也尝试将其实现为{{1} }。

非常感谢任何指导

3 个答案:

答案 0 :(得分:2)

您可能存在范围问题。 theDates在构造函数中声明,仅在构造函数中可见。一种可能的解决方案:将其声明为类字段。当然在构造函数中初始化它,但如果在类中声明它,它在类中是可见的。

答案 1 :(得分:2)

您在构造函数中将theDates定义为局部变量,因此其范围仅限于构造函数中。相反,将其声明为类的字段:

private Data[] theDates;

// ...

   public DateDriver()
   {
       theDates = new Date[100];
       // ...
   }

答案 2 :(得分:1)

1。您已经定义了 theDates ,它是构造函数中的一个数组对象引用变量,因此它的范围在构造函数本身内。

2. 您应该在类范围声明 theDates,因此它将在整个类中显示。

3。如果你使用Collection而不是Array,那就更好了,去找ArrayList

<强>例如

public class DateDriver {

    private ArrayList<Date> theDates;

    public DateDriver() {
        theDates = new ArrayList<Date>();
    }
}