2016-05-18 13 views
0

プロパティリストを表示し、プロパティを追加したり、プロパティを削除したり、更新したりするアプリケーションを構築しようとしています。

太字の単語はClassesであるべきだと思うものです。Javaでコンポジションクラスを作成してユーザー入力を使用してオブジェクトを作成および保存する

プロパティアドレスViewingArrangementを持っています。
には、streetNumber、streetName、郊外およびpostalCodeがあります。
閲覧の手配は、ContactPersonとopenTimeを持っています。
には、officeLocationとphoneNumberという名前があります。

私の問題は、別のクラスのオブジェクトで構成されるクラスを作成する方法を正確にはわかりません。例えば、
など。 閲覧編にはopenTimeがあり、ContactPersonはクラスです。

どのように作成するViewingArrangementクラス?ゲッターセッター、コンストラクターなどはどうしたらいいですか?私は一日中私のプログラムを試して変えてきましたが、まだそれを正しく得ることはできません。私は新しいです、助けてください!

package PropertyListing.data; 

public class ContactPerson { 
String cpName; 
String office; 
String pNo; 

public ContactPerson(String name, String off, String pno) 
{ 
    String cpName = name; 
    String office = off; 
    String pNo = pno; 
} 

public void setCpName(String cpName) 
{ 
    this.cpName = cpName; 
} 

public String getCpName() 
{ 
    return cpName; 
} 

public String getOffice() 
{ 
    return office; 
} 

public void setOffice(String office) 
{ 
    this.office = office; 
} 

public String getPno() 
{ 
    return pNo; 
} 

public void setPno(String pno) 
{ 
    this.pNo = pno; 
} 
} 

次の通り私のViewingArrangementクラス..です:(

package PropertyListing.data; 

public class ViewingArrangement { 
String availTime; 
private ContactPerson cp; 

public ViewingArrangement (String availT, ContactPerson p) 
{ 
    this.availTime = availT; 
} 

public String getVAtime() 
{ 
    return availTime; 
} 

public void setVAtime(String availTime) 
{ 
    this.availTime = availTime; 
} 

public ContactPerson getCP() 
{ 
    return cp; 
} 

public void setCP(ContactPerson cp) 
{ 
    this.cp = cp; 
} 


上記は、私は、いじりグーグルや変更の一日後になってしまったものです助けてください

私はこの問題を解決したら、私のプロパティを適切に保存することを願っています。私のJList(私はDefaultListModelにsetModelを行った)は、 "[email protected]"のようなものを表示するのではなく、プロパティをうまく表示するでしょう。

私はそれが原因で前述の問題が起こっていることを本当に願っていますこの悪い格納/表示..

答えて

0

あなたのオブジェクトのフィールドを作成していないだけでなく、あなたは実際にかなり正しいことをしています。それでは、なぜそれが正しく表示されないのですか?

System.outや一部のGUIのsetTextメソッドを使用して、Stringsなどのカスタムオブジェクトを表示している可能性があります。これはうまくいくはずですが、JVMにオブジェクトの印刷方法を教えていないのです!

前述のいずれかの状況が実行されると、オブジェクトのtoStringメソッドが呼び出されます。このメソッドはObjectから継承され、デフォルトではオブジェクトに関するいくつかのメモリデータが出力されます。 Stringは、格納している文字を返すことでこれを上書きします。

カスタムオブジェクトを正しく表示するには、toStringを上書きする必要があります。ここでは、あなたの好みに合わせて微調整することができViewingArrangementのための例です:あなたContactPersonクラスは、独自のオーバーライドtoString方法を持っている場合

@Override 
public String toString() { 
    return "Viewing Arrangement: availTime - "+availtime+", Contact Person - "+cp; 
} 

、上記の方法は、cpStringに追加されているので、自動的にtoStringそれを呼び出します!

toStringは、あまりにも多くのことに依存するべきではありません。 "最も高い"クラスの各値を個別にフォーマットするユーティリティクラス(個々の場合は、Property)を使用して、読み込み可能なStringを返します。

0

あなたがする必要があるのは、他のプロパティクラスを保持するPropertyクラスを作成することです。それはMapと呼ばれるもののように聞こえます。

さまざまなインスタンスデータを保持するオブジェクトを作成するのではなく、「自分」を保持するオブジェクトを作成して、プロパティフィールドに何かを入れてもデータに簡単にアクセスできるようにすることができます。ツリーは、より多くのプロパティと単一のプロパティフィールドで構成されるプロパティを保持できるので、この実装に役立ちます。

import java.util.*; 

public class Property { 

    private Map<String, Property> properties; 
    private String data; 

    public Property() { 

      properties = new ArrayList<HashMap>(); 
      data = null; 

    } 

    public void setData(String propertyName, String newData) { 

     // if we can find another field to put this in, do so. Else, store it in this property. 
     if (!properties.containsKey(propertyName) 
      properties.get(propertyName).setData(newData); 
     else 
      data = newData; 
    } 

    public String getData(String key) { 

     properties.get(key).getData(); 

    } 

} 

これを使用すると、効果的に(再帰的に)プロパティのツリーを作成し、これを保存して参照することができます。このようなクラスは、保存する必要があるものに合わせて変更することができます。お役に立てれば!

関連する問題