2016-04-11 7 views
0

Это немного запутанно, чтобы сформулировать, но я сделаю все возможное. У меня есть 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?

+0

Объект arrayList of Art в addArtGUI вполне приемлем. – NAMS

+0

Итак, я добавил публичный ArrayList allArt; в addArtGUI и allArt.add (a); к методу кнопки отправки, и теперь он возвращает чудовищное исключение nullPointerException, даже если у меня есть материал в полях GUI, и он указывает на инструкцию allArt.add (a). Есть идеи? –

+0

* Ничего не статично - не уверен, что это актуально, но я никогда не понимал статичность, поэтому для всех знаю, что это может быть проблемой. –

ответ

0

Вы можете добавить элемент Art-объекта в свой класс AddArtGUI и установить этот элемент вместо использования локальной переменной в методе submitButtonActionPerformed.

Смежные вопросы