如何从另一个类访问ArrayList

时间:2014-10-22 04:44:56

标签: java class user-interface arraylist

好的我有多个Java文件,但目前只看2,我正在做一个GUI程序。 我有一个Landlords的arraylist在一个文件中使用getLandlords方法返回数组并且它不会工作eclipse只是给出错误无论我尝试什么 档案1

package assignment2;


import java.awt.event.*;
import java.awt.*;
import java.util.*;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;


public class RealEstateManage extends JFrame implements ActionListener, ListSelectionListener{

public static void main(String[] args)
{

    RealEstateManage theGUI = new RealEstateManage();

}

//Initial setup for base of GUI
private JFrame jfFrame;
private JButton jbAddLandlord, jbAddProperty, jbAddLease, jbRecord, jbMaintenance, jbDisplayproperty;
private JTextArea jtaResults;
private JTextField jtfinput1, jtfinput2, jtfinput3, jtfinput4;
private JList <Landlord> jlLandlord;
private Vector<Landlord> vlist = new Vector<Landlord>();
private JPanel jpButtons = setupButtons(), jpResults = setupResults();
public RealEstateAgency R = new RealEstateAgency();


public RealEstateManage()
{
    jfFrame = new JFrame ();
    jfFrame.add(jpButtons, "North");
    jfFrame.add(jpResults,"West");

    jfFrame.setSize(900, 400);
    jfFrame.setLocation(400, 300);
    jfFrame.setTitle("Real Estate Management");
    jfFrame.setVisible(true);
}


//Setup the buttons at the top of the GUI
public JPanel setupButtons()
{
    JPanel jp = new JPanel ();

    jbAddLandlord = new JButton("Add New Landlord");
    jbAddProperty = new JButton("Add New Property");
    jbAddLease = new JButton("Add New Lease");
    jbRecord = new JButton("Record Payment");
    jbMaintenance = new JButton("Maintenance");
    jbDisplayproperty = new JButton("Display Properties");

    jp.add(jbAddLandlord); 
    jp.add(jbAddProperty); 
    jp.add(jbAddLease); 
    jp.add(jbRecord); 
    jp.add(jbMaintenance); 
    jp.add(jbDisplayproperty);

    jbAddLandlord.addActionListener(this);
    jbAddProperty.addActionListener(this);
    jbAddLease.addActionListener(this);
    jbRecord.addActionListener(this);
    jbMaintenance.addActionListener(this);
    jbDisplayproperty.addActionListener(this);

    return jp;
}

public JPanel setupResults()
{
    JPanel jp = new JPanel ();


    vlist.add(new Landlord("Fred Jones", "23 Hamilton Road", "0458 789 456", 456123369));

    jtfinput1 = new JTextField (10);
    jtfinput2 = new JTextField (10);
    jtfinput3 = new JTextField (10);
    jtfinput4 = new JTextField (10);

    ArrayList<Landlord> Alist = R.getLandlords();

    jlLandlord = new JList<Landlord>(vlist);
    jlLandlord.addListSelectionListener(this);
    jlLandlord.setPreferredSize(new Dimension(250, 300));

    JLabel jlResults = new JLabel ("Output!");

    jtaResults = new JTextArea (18, 30);
    jtaResults.setEnabled(false);



    jp.add(jlLandlord);
    jp.add(jlResults);
    jp.add(jtaResults);


    return jp;
}


//List Events
@Override
public void valueChanged(ListSelectionEvent arg0) {
    // TODO Auto-generated method stub

}


//Button Action Events
public void actionPerformed(ActionEvent ae) {
// Button Events

    if(ae.getSource() == jbAddLandlord)
    {
        addLandlord();
    }
    if(ae.getSource() == jbAddLandlord)
    {

    }


}

//Add landlord function
public void addLandlord()
{
    boolean inputIsOk = true;
    String stName, stAddress, stNum, stBank;
    long bank = 0;

    JPanel myPanel = new JPanel();
    myPanel.add(new JLabel("Name:"));
    myPanel.add(jtfinput1);
    myPanel.add(new JLabel("Address:"));
    myPanel.add(jtfinput2);
    myPanel.add(new JLabel("Phone:"));
    myPanel.add(jtfinput3);
    myPanel.add(new JLabel("Bank Account: (8-10 Digits)"));
    myPanel.add(jtfinput4);



    int result = JOptionPane.showConfirmDialog(null, myPanel, 
           "Please Enter X and Y Values", JOptionPane.OK_CANCEL_OPTION);
    if (result == JOptionPane.OK_OPTION) {
        stName = jtfinput1.getText();
        stAddress = jtfinput2.getText();
        stNum = jtfinput3.getText();
        stBank = jtfinput4.getText();
        try{bank = Long.valueOf(stBank).longValue();                
        }
        catch(NumberFormatException nfe){
            inputIsOk = false;              
        }
        if (inputIsOk = true){
            R.addLandlord(new Landlord(stName, stAddress, stNum, bank));
        }

    }
   // jlLandlord.updateUI();

}



}

文件2

package assignment2;

import java.util.*;

// The RealEstateAgency class is intended to be the central place to go to for finding
// a landlord that the system "knows" about. 

public class RealEstateAgency {
private ArrayList<Landlord> allLandlords;       // A way of collecting all the Landlords

public RealEstateAgency()
{
    // prepare the agency for future landlords...
    allLandlords = new ArrayList<Landlord>();
    addLandlord(new Landlord("stName", "stAddress", "stNum", 12456897));
    System.out.println(getLandlords());
}

// Method to note the provided Landlord, by adding it to the RealEstateAgency's internal ArrayList.
// Returns true if apparently successful, false if something goes wrong such as the landlord already being present.
public boolean addLandlord(Landlord whoToStore)
{
    boolean success = false;

    if (whoToStore == null)         // ensure there is actually a parameter
        success = false;
    else {
        if (allLandlords.contains(whoToStore))      // landlord already in the list
            success = false;
        else
        {                                           // Landlord not yet in list
            allLandlords.add(whoToStore);           // So add this landlord
            success = true;
        }
    }

    return success;
}

// Method to obtain a landlord from the RealEstateAgency's collection of known landlords,
// by providing the full name. If no such landlord exists, null will be returned.
public Landlord getLandlord(String fullName)
{
    Landlord current = null;
    boolean found = false;
    int index = 0;

    while ((!found) && (index < allLandlords.size()))
    {
        current = allLandlords.get(index);
        if (current.getFullName().equals(fullName))
            found = true;
        else
            index++;
    }

    // If we get to here, and "found" is true, then "current" will be the matching Landlord

    if (!found)                 // did not find a match
        current = null;         // so ensure we return no Landlord

    return current;
}


// Method to obtain an ArrayList containing the same landlords as those which the
// RealEstateAgency knows about (but without exposing the inner ArrayList object
// so that any alterations made to the returned ArrayList won't impact the RealEstateAgency)
public ArrayList<Landlord> getLandlords()
{
    ArrayList<Landlord> duplicate;
    duplicate = (ArrayList<Landlord>) allLandlords.clone();     

    return duplicate;
}

public ArrayList<Landlord> getLandlords1()
{
    return allLandlords;
}

}

任何帮助或建议都将不胜感激。

我遇到的问题是在setupResults()函数和getLandlords()函数中

提前致谢

LANDLORD CODE

package assignment2;

import java.util.*;

// The Landlord class allows you to create objects that encapsulate the key data 
// about each Landlord, as well as the information about all the properties that 
// they make available for rent (some of which may have current leases active). 

public class Landlord {
private String fullName;        // The name of the landlord
private String address;         // Where the landlord lives!
private String phone;           // allow for spaces in number
private long bankAccount;       // To permit 10 digits, requires the 'long' data type

private ArrayList<Property> myProperties;       // All properties owned by this landlord

public Landlord(String fullName, String address, String phone, long bankAccount)
{
    // Simply store the parameters into the fields...
    this.fullName = fullName;
    this.address = address;
    this.phone = phone;
    this.bankAccount = bankAccount;

    // prepare for future leases...
    myProperties = new ArrayList<Property>();
}

// ACCESSORS for each field of basic information

public String getFullName()
{
    return fullName;
}

public String getAddress()
{
    return address;
}

public String getPhone()
{
    return phone;
}

public long getBankAccount()
{
    return bankAccount;
}

// Method to note/store another Property, where this Landlord is considered the owner of the property.
// It returns true if successfully added to the list of properties belonging to this landlord.
public boolean addProperty(Property theProperty)
{
    boolean result;
    if (theProperty == null)        // if it is null, we ignore this method call.
        result = false;
    else if (!myProperties.contains(theProperty)){  // Make sure it is not already in the array list
        myProperties.add(theProperty);
        result = true;
    }
    else                            // This means w have already added the property, so cannot add it again.
        result = false;

    return result;
}

// Method to return an iterator that may be used to cycle over all leases involving this landlord.
public Iterator<Property> getPropertiesIterator()
{
    return myProperties.iterator();
}

public String toString()
{
    return "Landlord: " + fullName;
}
}

财产代码

package assignment2;

// The Property class encapsulates the basic information about one property the system knows 
// about: essentially the address of the property, and a reference to the Lease details of the property.

public class Property {
private String propertyAddress;
private Lease currentLease;                 // When null, there is no active lease (it is available).

public Property(String address)
{
    this.propertyAddress = address;
    this.currentLease = null;               // Initially, nobody is leasing it.
}

public String getPropertyAddress()
{
    return propertyAddress;
}

// no mutator for address, because it won't ever change.

// Method to return the current lease's details.
public Lease getCurrentLease()
{
    return currentLease;
}

// Method to set the current Lease of this Property.
// If null is provided, the property will not have any Lease assigned to it;
// otherwise, the provided Lease will be recorded as describing the relationship for this property.
public void setCurrentLease(Lease newLease)
{
    currentLease = newLease;
}

// Method to report whether or not this property is currently associated with a lease (regardless
// of whether fully paid or not)
public boolean isLeased()
{
    if (currentLease == null)
        return false;
    else
        return true;
}

public String toString()
{
    return "Property: " + propertyAddress;
}
}

租赁代码

package assignment2;

import java.util.*;

// The Lease class encapsulates information about an individual lease of a property by a tenant. 
// The data stored here includes all the tenant’s details (name, phone number) as well as 
// characteristics of the lease itself such as the duration, the weekly rent amount, how long
// remains in terms of payments, what maintenance has occurred.

public class Lease {
private String tenantFullName;  // The name of the person who is living in the leased property.
private String tenantPhone;     // Contact number for the person. Allow a leading zero at start, spaces between sections.
private int rentRate;           // The amount of rent to be paid each week.
private int leasePeriod;        // Either 6 or 12, being a 6 month or 12 month agreement
private int weeksRemaining;     // How many weeks remain to be paid for. Initially 26 or 52.
private ArrayList<Maintenance> maintenanceRecord;       // record of all maintenance during life of lease

// Create a new lease, recording the following details:
// - tenantName:  records the name of the person living in the property
// - tenantPhone: records a contact phone number for the tenant
// - rentRate:    the amount of rent which is to be paid each week.
// - leasePeriod: Either 6 or 12, indicating the number of months the lease is to last for.  
public Lease(String tenantName, String tenantPhone, int rentRate, int leasePeriod)
{
    this.tenantFullName = tenantName;
    this.tenantPhone = tenantPhone;
    this.rentRate = rentRate;

    if (leasePeriod == 12 || leasePeriod == 6)      // Check validity of parameter
        this.leasePeriod = leasePeriod;
    else                                            // if not valid, set to default of 6 month.
        this.leasePeriod = 6;

    // Determine (automatically) how many weeks the lease is for, and set as initial value
    // for the 'weeksRemaining' field:
    if (this.leasePeriod == 12)
        this.weeksRemaining = 52;           // a Year remains to be paid for
    else
        this.weeksRemaining = 26;           // Only half a year remains to be paid for.

    // Prepare the lease for future Maintenance records...
    maintenanceRecord = new ArrayList<Maintenance>();
}

// ACCESSORS

public String getTenantFullName()
{
    return tenantFullName;
}

public String getTenantPhone()
{
    return tenantPhone;
}

public int getRentRate()
{
    return rentRate;
}

public int getLeasePeriod()
{
    return leasePeriod;
}

public int getWeeksRemaining()
{
    return weeksRemaining;
}

// Method to reduce the number of weeks remaining to be paid over the period of the lease.
// If the parameter is in excess of the current number of remaining weeks, the method will
// return false, otherwise it returns true and adjusts the number of remaining weeks.
public boolean reduceWeeksRemaining(int howMuch)
{
    boolean result;
    if (howMuch > weeksRemaining)
        result = false;
    else
    {
        weeksRemaining -= howMuch;      // Reduces how many weeks remain unpaid.
        result = true;
    }
    return result;
}

// Method to add another maintenance information record to this lease's list of maintenance records. 
public void noteMaintenance(String reason, double cost)
{
    Maintenance maintInfo = new Maintenance(reason,cost);
    maintenanceRecord.add(maintInfo);
}

// Method to return an Iterator that may be used to cycle over all maintenance records for this lease
public Iterator<Maintenance> getMaintenanceRecords()
{
    return maintenanceRecord.iterator();
}
}

维护代码

package assignment2;

// The Maintenance class is used to represent an individual occurrence of Maintenance 
// and records the cost and description of the maintenance.

public class Maintenance {
private String reason;
private double cost;

public Maintenance(String reason, double cost)
{
    this.reason = reason;
    this.cost = cost;
}

// ACCESSORS:

public String getReason()
{
    return reason;
}

public double getCost()
{
    return cost;
}

// Gives a explanation of the cost and reason represented by this Maintenance object.
public String toString()
{
    return "$" + cost + " for " + reason;
}
}

1 个答案:

答案 0 :(得分:0)

原因是您在setupResults()之前初始化R

变化:

private JPanel jpButtons = setupButtons(), jpResults = setupResults();
public RealEstateAgency R = new RealEstateAgency();


public RealEstateManage()
{

private JPanel jpButtons;
private JPanel jpResults;
public RealEstateAgency R = new RealEstateAgency();


public RealEstateManage()
{
    jpButtons  = setupButtons();
    jpResults = setupResults();

作为旁注: 您将结果视为:

ArrayList<Landlord> Alist = R.getLandlords();

但从不使用该值。 也许你打算写:

ArrayList<Landlord> Alist = R.getLandlords();

jlLandlord = new JList<Landlord>(Alist.toArray(new Landlord[0]));
                                 ^    ^^^^^^^^^^^^^^^^^^^^^^^^^

但你没有。