如何在不影响olders的情况下添加新的静态参数?

时间:2016-07-19 11:38:56

标签: java netbeans

我必须从用户那里读取制造商的名称和密钥的类型。我已经使用String fabricant和Key类型列表定义了一个类“article”。如果我必须添加一个新类型它没关系,但如果我必须添加一个新的制造商,那么制造商的新名称会改变之前的那个。这是代码(Allarticle这是一组文章):

load

通过调试,我在add函数中创建了第二个问题。我认为它有一些事实,即变量mFabricant是静态的,但是我无法改变它,因为我需要在其他Jframe中使用它。 这是函数addArticle和类Article:

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");
}

这是第一个Jframe的代码,我从中获取了值和itembox:

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

public class Article {

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

以下是根据制造商选择密钥类型的代码:

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

1 个答案:

答案 0 :(得分:0)

变量mFabricant,本质上是静态的,在所有Article实例中共享,这意味着通过任何Article实例设置其值将覆盖所有实例。

请分享您在JFrame中使用它的代码。

我建议您将'mFabricant'更改为实例字段,并将mFabricant或Article实例的引用传递给JFrame。

更改TypeFE类构造函数以将制造商作为参数:

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

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

在TyprFE初始化中传递选定的制作者:

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

您可以在文章列表中搜索此制作者值,并在文章存在时添加类型或添加新文章。