我必须从用户那里读取制造商的名称和密钥的类型。我已经使用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();
答案 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();
您可以在文章列表中搜索此制作者值,并在文章存在时添加类型或添加新文章。