Java 将 ArrayList 传递给另一个 JFrame
Java Passing ArrayList to another JFrame
您好,我正在学习 java,在我的项目中,我正在尝试将数据传递给另一个 JFrame。
这是我的访客相框class
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
以及该列表的 getter 函数:
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 后的结果是数组似乎输出空 []
我想这可能是因为在 Guest 框架构造函数中覆盖了它?
我不知道如何解决这个问题。
我认为有 3 个选项可以解决这个问题,
1.可以使用数据库来操作列表数据。所以 GuestFrame
用于保存数据,而 CartFrame
可以从数据库中获取数据而不依赖于其他 class 属性。
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>();
,这样其他 classes 就可以直接从 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());
}
}
Static 属性 直接关联到 class。即使不创建 class 的实例也可以调用它们,例如:ClassName.propertyName
您好,我正在学习 java,在我的项目中,我正在尝试将数据传递给另一个 JFrame。
这是我的访客相框class
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
以及该列表的 getter 函数:
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 后的结果是数组似乎输出空 []
我想这可能是因为在 Guest 框架构造函数中覆盖了它?
我不知道如何解决这个问题。
我认为有 3 个选项可以解决这个问题,
1.可以使用数据库来操作列表数据。所以 GuestFrame
用于保存数据,而 CartFrame
可以从数据库中获取数据而不依赖于其他 class 属性。
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>();
,这样其他 classes 就可以直接从 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());
}
}
Static 属性 直接关联到 class。即使不创建 class 的实例也可以调用它们,例如:ClassName.propertyName