2014-10-22 105 views
-3

好吧,我有多个Java文件,但目前只看2,我正在做一个GUI程序。 我有一个文件与返回数组一个getLandlords方法斗地主的ArrayList和它不会工作日食只是给出了一个错误,不管我怎么努力 文件1如何从另一个类访问ArrayList

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(); 

} 



} 

FILE 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()函数预先

由于

业主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

你会得到什么错误? – 2014-10-22 04:47:22

+0

你的函数定义为'public Landlord getLandlord(String fullName)',它返回一个'Landlord'而不是'ArrayList '! – 2014-10-22 04:49:20

+0

@AlvinBunk向下滚动。有getLandlords()和getLandlords1() – 2014-10-22 04:50:06

回答

0

的原因是,你R之前初始化setupResults()

变化:

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])); 
           ^ ^^^^^^^^^^^^^^^^^^^^^^^^^ 

但你没有。

+0

当我做到这一点我得到错误:JList的(ArrayList的)在assignment2.RealEstateManage.setupResults(RealEstateManage.java:89) – Chris 2014-10-22 04:58:16

+0

@克里斯咩未定义 构造函数。固定。我总是忘记JLists不喜欢收藏。 – 2014-10-22 05:03:57

+0

现在尝试错误:构造函数JList (Object [])未定义 – Chris 2014-10-22 05:05:03

相关问题