Java Передача ArrayList другому JFrame - PullRequest
0 голосов
/ 31 декабря 2018

Привет, я изучаю Java, и в своем проекте я пытаюсь передать данные в другой JFrame.

Это мой класс Guest Frame

public class GuestFrame extends javax.swing.JFrame {

    private List<String> list = new ArrayList<String>();

    public GuestFrame(){
         initComponents();             
    }
}

Способ добавления данных.для arraylist - это добавление выбранного элемента из JList в корзину, добавляемого один за другим, например:

private void kButton1ActionPerformed(java.awt.event.ActionEvent evt) {  
    String receiveList = lstEntitety.getSelectedValue().toString(); 
    list.add(receiveList); 
    //System.out.println(list.toString()); outputs all the data added

И функция получения для этого списка:

public List<String> getList() {
    return list;
}

Что я пытаюсь сделатьсделать это отобразить все добавленные продукты питания в моем другом JFrame

public class CartFrame extends javax.swing.JFrame {
private GuestFrame food;
     public CartFrame() {     
     initComponents();
     food= new GuestFrame();
     List<String> list = food.getList();

     //Here I am trying to output the arraylist that I appended in prevous frame
     jTextArea1.setText(list.toString());

}

Результат при входе в CartFrame заключается в том, что массив, кажется, выводит пустой []

Я подумал, что это может быть потому, чтов гостевом фрейме конструктор переопределяет это?

Я не уверен, как решить эту проблему.

1 Ответ

0 голосов
/ 31 декабря 2018

Я думаю, что есть 3 варианта, чтобы решить этот случай,
1. может использовать базу данных для манипулирования данными списка.поэтому GuestFrame используется для сохранения данных, тогда как CartFrame может получать данные из базы данных без зависимости от другого свойства класса.

2. во-вторых, можно использовать java.util.Properties для манипулирования данными списка.

Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("xyz.properties");
prop.load(in);

сохранить данные в GuestFrame:

prop.setProperty("dataSize", "(list.lenght())");
prop.setProperty("data1", "...");
prop.setProperty("data2", "...");
prop.setProperty("...", "...");
....
prop.store(new FileOutputStream("xyz.properties"), null);

загрузить данные в CartFrame:

prop.getProperty("dataSize");
//loop i=0 until < dataSize
list.add(prop.getProperty("data"+i));


3. Последний вариант:сделать private List<String> list = new ArrayList<String>(); статическим private static List<String> list = new ArrayList<String>();, чтобы другие классы могли обращаться к свойству списка прямо из GuestFrame без необходимости создавать экземпляр.

  public class GuestFrame extends javax.swing.JFrame {
    private static List<String> list = new ArrayList<String>();

    public GuestFrame(){
       initComponents();    

    }

    public static List<String> getList() {
       return list;
    }
 }


 public class CartFrame extends javax.swing.JFrame {

 public CartFrame() {     
   initComponents();
   List<String> list = GuestFrame.getList();
   cText.setText(list.toString());
   jLabel3.setText(list.toString());
 }
}

Статические свойства связаны с классом напрямую.они могут быть вызваны даже без создания экземпляра класса, например: ClassName.propertyName

...