Это немного запутанно, чтобы сформулировать, но я сделаю все возможное. У меня есть 3 класса, которые здесь важны: Art.java, AddArtGUI.java и GUI.java. Art.java создает объект Art с несколькими атрибутами, но ничего не делает с ним. GUI.java - это то, что мы запускаем, и создает AddArtGUI, который предлагает пользователю создать новый арт-объект с атрибутами, предоставленными пользователем. AddArtGUI создает новый объект искусства каждый раз, когда он запускается, но тогда я ничего не могу с этим поделать. Мне нужно иметь возможность щелкнуть «done» и добавить addArtGUI для хранения объекта где-нибудь, чтобы он мог получить доступ к другим методам (например, методу viewArt) позже. Мне также нужно иметь возможность запускать AddArtGui и впоследствии создавать больше объектов искусства.Использование java-объекта вне метода, который находится в отдельном классе
Вот что у меня есть.
package jz.art;
import java.util.ArrayList;
public class Art {
private String name;
private String artist;
private ArrayList<String> tags;
//constructor
public Art(String artName, String artistName){
//various attributes
name = artName;
artist = artistName;
tags = new ArrayList<String>();
}
//things for use in later methods
public String getName(){
return name;
}
public String getArtist(){
return artist;
}
public void addKeyword(String p){
tags.add(p);
}
public boolean matches(String v){
for(int i = 0; i<tags.size(); i++){
if(tags.get(i)==v){
return true;
}
}
return false;
}
}
И AddArtGUI:
package jz.art;
import java.util.Arrays;
public class AddArtGUI extends javax.swing.JFrame {
/**
* Creates new form AddArtGUI
*/
public AddArtGUI() {
initComponents();
System.out.println("---AddArt Opened---");
}
/**
**//initialize form method went here.**
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String attributes = tagsField.getText();
String[] splitTags = attributes.split(", ");
Art a = new Art(artNameField.getText(), artistNameField.getText());
for(int i = 0; i<splitTags.length; i++){
a.addKeyword(splitTags[i]);
}
System.out.println("Sucessfully added a piece with the following attrubtes:");
System.out.println("Name: "+artNameField.getText());
System.out.println("Artist: "+artistNameField.getText());
System.out.println("Tags: "+Arrays.toString(splitTags));
this.dispose();
System.out.println("---AddArt Closed---");
}
**//main method and look/feel setting code were here**
// Variables declaration - do not modify
private javax.swing.JLabel ArtNameTitel;
private javax.swing.JLabel ArtistNameTitile;
private javax.swing.JLabel TagsNameTitle;
private javax.swing.JLabel Title;
private javax.swing.JTextField artNameField;
private javax.swing.JTextField artistNameField;
private javax.swing.Box.Filler filler1;
private javax.swing.Box.Filler filler2;
private javax.swing.JButton submitButton;
private javax.swing.JTextField tagsField;
// End of variables declaration
}
Чтобы резюмировать: Мне нужно, чтобы иметь возможность хранить Художественный объект вне метода AddArtGUI. Есть идеи?
Редактировать: следует ли использовать объекты массива объектов Art?
Объект arrayList of Art в addArtGUI вполне приемлем. – NAMS
Итак, я добавил публичный ArrayList allArt; в addArtGUI и allArt.add (a); к методу кнопки отправки, и теперь он возвращает чудовищное исключение nullPointerException, даже если у меня есть материал в полях GUI, и он указывает на инструкцию allArt.add (a). Есть идеи? –
* Ничего не статично - не уверен, что это актуально, но я никогда не понимал статичность, поэтому для всех знаю, что это может быть проблемой. –