2016-07-19 9 views
0

私は、ユーザーからファブリックの名前とキーのタイプを読み取る必要があります。私は、StringファブリックとキーのタイプのListを持つクラス "article"を定義しました。新しいタイプを追加する必要がある場合は問題ありませんが、新しいファブリックを追加する必要がある場合は、そのファブリックの新しい名前が以前のものに変更されます。oldersに影響を与えずに新しい静的パラメータを追加するにはどうすればいいですか?

Cle.mType = textntype.getText(); 
Set <String> nType = new HashSet<>(); 
boolean found = false; 
String antes = Article.mFabricant; 

Allarticle allarticle = new Allarticle(); 
allarticle.importFrom("article.txt"); 
for(String fabric : allarticle.getFabricants()){ 

    if(fabric.equals(antes)){ 
     found = true; 
     allarticle.getTypeForFabricant(antes).add(textntype.getText()); 
     allarticle.exportTo("article.txt"); 
    } 
} 
if(found == false){ 

    nType.add(textntype.getText()); 
    allarticle.addArticle(new Article(antes,nType)); 
    allarticle.exportTo("article.txt"); 
} 

追加機能であれば、私は第二の内側の問題を設立しているデバッグの場合:これは、コード(それは記事のセットですAllarticleクラス)です。変数mFabricantは静的であるという事実に関連するものがあると思いますが、私は他のJframeでそれが必要なので変更できません。 これは、関数addArticleとArticleクラスである:

public void addArticle(Article article){ 
    mArticles.add(article); 
} 

public class Article { 

protected static String mFabricant; 
protected Set<String> mType;} 

これは、モミのコードのJFrame Iから値を取得し、itemboxです:

Article.mFabricant = (String) articlesbox.getSelectedItem(); 
    Cle.mFabricant = (String) articlesbox.getSelectedItem(); 
    TypeFE obj = new TypeFE(); 
    obj.setVisible(true); 
    dispose(); 

そして、ここでは、選択のためのコードですfabricantに基づいて、鍵の種類:

public TypeFE() { 
    initComponents(); 
    setLocationRelativeTo(null); 
    setResizable(false); 
    setTitle("Type"); 
    Allarticle allarticle = new Allarticle(); 
    allarticle.importFrom("article.txt"); 
    Set <String> marticles; 
    marticles = allarticle.getTypeForFabricant(Article.mFabricant); 
    for(String article : marticles){ 
     typebox.addItem(article); 
    } 


} 

答えて

0

変数mFabricant、本質的に静的であることは、そのVAを設定することを意味条のすべてのインスタンス間で共有されますすべてのインスタンスに対して、それを上書きします。

JFrameで使用しているコードを共有してください。

「mFabricant」をインスタンスフィールドに変更し、mFabricantまたはArticleインスタンスの参照をJFrameに渡すことをお勧めします。あなたのTyprFEの初期化中

public TypeFE(final String fabricant) { 
    .... 

    marticle = allarticles.getTypeForFabricant(fabricant); 
    ..... 
} 

パス選択fabricant:

final String fabricant = (String) articlesbox.getSelectedItem(); 
TypeFE obj = new TypeFE(fabricant); 
obj.setVisible(true); 
dispose(); 

あなたは記事のリストにこのfabricant値を検索して追加することができます

変更TypeFEクラスのコンストラクタは、パラメータとしてfabricant取ります記事が存在する場合は入力するか、新しい記事を追加します。

+0

ありがとうございました! getFabricantメソッドを使用すると、すべてのJframeで値が同じになりますか?私が見つけた問題は、その記事が新しいフレームで定義されていないため、すべてで定義する必要がありますその場合、値は違うでしょうか、いいえ?私は、Javaでメモリストレージがどのように機能するかをよく知りません。どうもありがとうございました。 –

+0

私はあなたのコードの変更を提案する答えを変更しました。何か不明な点がある場合は、電子メールで関係者と話し合いをしてください。私は変更を支援することができます。乾杯! –

+0

ありがとう、私はJframeのクラスコンストラクタを変更することができませんでした!それは今完璧に動作します。再びありがとう –

関連する問題