Java ArrayList 返回 0 值
Java ArrayList returning 0 value
我正在尝试在 java 上使用 swing 构建应用程序,用户需要输入一些产品并将它们存储在数组列表中,并在 table (JTable) 上显示产品列表在另一个 Jframe 中,我遇到的问题是,当我添加产品并单击列表按钮时,table 不包含产品,即使 Arraylist 大小 return 0
Class 产品
package Inventory;
public class Produit {
private int code;
private int StockInitial;
private int StockEntree;
private int StockSortie;
private int StockReel;
public Produit(int code, int StockInitial, int StockEntree, int StockSortie) {
this.code = code;
this.StockInitial = StockInitial;
this.StockEntree = StockEntree;
this.StockSortie = StockSortie;
this.StockReel = (this.StockInitial+this.StockEntree)-this.StockSortie;
}
public void AjouterProduit(int code, int StockInitial, int StockEntree, int StockSortie) {
this.code = code;
this.StockInitial = StockInitial;
this.StockEntree = StockEntree;
this.StockSortie = StockSortie;
this.StockReel = (this.StockInitial+this.StockEntree)-this.StockSortie;
}
public Produit() {
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public int getStockInitial() {
return StockInitial;
}
public void setStockInitial(int StockInitial) {
this.StockInitial = StockInitial;
}
public int getStockEntree() {
return StockEntree;
}
public void setStockEntree(int StockEntree) {
this.StockEntree = StockEntree;
}
public int getStockSortie() {
return StockSortie;
}
public void setStockSortie(int StockSortie) {
this.StockSortie = StockSortie;
}
public int getStockReel() {
return this.StockReel;
}
public void setStockReel(int StockReel) {
this.StockReel = StockReel;
}
}
Class 库存 用户可以输入产品详细信息的 jframe
package Inventory;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;
public class Inventory extends JFrame implements ActionListener {
public ArrayList<Produit> listProduit = new ArrayList<Produit>();
JLabel l1 = new JLabel("Code : ");
JLabel l2 = new JLabel("Stock initial : ");
JLabel l3 = new JLabel("Stock entree : ");
JLabel l4 = new JLabel("Stock sortie : ");
JTextField t1 = new JTextField(20);
JTextField t2 = new JTextField(20);
JTextField t3 = new JTextField(20);
JTextField t4 = new JTextField(20);
JButton b1 = new JButton("Suivant");
JButton b2 = new JButton("liste");
JFrame frame = new JFrame("Inventory");
public Inventory(){
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.getContentPane().add(l1);
frame.getContentPane().add(t1);
frame.getContentPane().add(l2);
frame.getContentPane().add(t2);
frame.getContentPane().add(l3);
frame.getContentPane().add(t3);
frame.getContentPane().add(l4);
frame.getContentPane().add(t4);
frame.getContentPane().add(b1);
frame.getContentPane().add(b2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b1.addActionListener(this);
b2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b1){
int code = Integer.parseInt(t1.getText());
int StockInitial = Integer.parseInt(t2.getText());
int StockEntree = Integer.parseInt(t3.getText());
int StockSortie = Integer.parseInt(t4.getText());
Produit p = new Produit(code,StockInitial,StockEntree,StockSortie);
listProduit.add(p);
}
if(e.getSource()==b2) {
new Liste().frame.setVisible(true);
}
}
public ArrayList<Produit> getList() {
return listProduit;
}
public static void main(String[] args) {
new Inventory().frame.setVisible(true);
}
}
Class库存向用户展示产品详情的jframe
package Inventory;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
public class Liste extends JFrame {
JFrame frame = new JFrame("Inventory");
String head[] = {"Code","Stock Intial","Stock Entree","Stock Sortie","Sotck Reel"};
String[][] Rows = {};
DefaultTableModel model = new DefaultTableModel(Rows,head);
Inventory n;
JTable table = new JTable(model);
JScrollPane sp = new JScrollPane(table);
Container con = null;
public Object[] objProduit;
public void addRowToJTable()
{
}
public Liste(){
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0);
for(int i=0;i<n.listProduit.size();i++){
Object[] obj = {n.listProduit.get(i).getCode(),n.listProduit.get(i).getStockInitial(),n.listProduit.get(i).getStockEntree(),n.listProduit.get(i).getStockSortie(),n.listProduit.get(i).getStockReel()};
model.addRow(obj);
}
//return 0
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
}
如果您希望 Liste
class 访问 Inventory
class 的 listProduit
,您有多种选择。
我喜欢的顺序:
1。将 listProduit
传递给 Liste
构造函数
在actionPerformed()
方法中,创建Liste
实例如下:
new Liste(listProduit).frame.setVisible(true);
为此,您需要按如下方式更改 Liste
构造函数:
private List<Produit> listProduit;
public Liste(List<Produit> listProduit) {
this.listProduit = listProduit;
model.setRowCount(0);
for (int i = 0; i < listProduit.size(); i++) {
Produit p = listProduit.get(i);
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
}
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
不需要 Liste
class 中的字段 Inventory n
。
2。将 Inventory
实例传递给 Liste
构造函数
在actionPerformed()
方法中,创建Liste
实例如下:
new Liste(this).frame.setVisible(true);
为此,您需要按如下方式更改 Liste
构造函数:
public Liste(Inventory inventory) {
this.n = inventory;
model.setRowCount(0);
for (int i = 0; i < n.listProduit.size(); i++) {
Produit p = n.listProduit.get(i);
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
}
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
3。使 listProduit
成为静态字段
这只是为了完整性。您应该创建尽可能少的静态字段 - 静态字段是一种懒惰的“解决方案”,如果您的程序增长,它可能会产生大问题,并且从这种方法更改为更好的方法(最好是第一种方法)越难,您拥有的代码越多依赖于静态字段。
在classInventory
中更改字段listProduit
的声明如下:
public static List<Produit> listProduit = new ArrayList<Produit>();
然后您可以按如下方式更改 Liste
的构造函数:
public Liste(Inventory inventory) {
model.setRowCount(0);
for (int i = 0; i < Inventory.listProduit.size(); i++) {
Produit p = Inventory.listProduit.get(i);
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
}
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
您可以使用增强的 for 循环或使用 List
接口的 forEach()
方法进一步改进构造函数。
使用增强的 for 循环:
private List<Produit> listProduit;
public Liste(List<Produit> listProduit) {
this.listProduit = listProduit;
model.setRowCount(0);
for (Produit p: listProduit) {
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
}
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
与forEach()
:
private List<Produit> listProduit;
public Liste(List<Produit> listProduit) {
this.listProduit = listProduit;
model.setRowCount(0);
listProduit.forEach(p -> {
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
});
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
我正在尝试在 java 上使用 swing 构建应用程序,用户需要输入一些产品并将它们存储在数组列表中,并在 table (JTable) 上显示产品列表在另一个 Jframe 中,我遇到的问题是,当我添加产品并单击列表按钮时,table 不包含产品,即使 Arraylist 大小 return 0
Class 产品
package Inventory;
public class Produit {
private int code;
private int StockInitial;
private int StockEntree;
private int StockSortie;
private int StockReel;
public Produit(int code, int StockInitial, int StockEntree, int StockSortie) {
this.code = code;
this.StockInitial = StockInitial;
this.StockEntree = StockEntree;
this.StockSortie = StockSortie;
this.StockReel = (this.StockInitial+this.StockEntree)-this.StockSortie;
}
public void AjouterProduit(int code, int StockInitial, int StockEntree, int StockSortie) {
this.code = code;
this.StockInitial = StockInitial;
this.StockEntree = StockEntree;
this.StockSortie = StockSortie;
this.StockReel = (this.StockInitial+this.StockEntree)-this.StockSortie;
}
public Produit() {
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public int getStockInitial() {
return StockInitial;
}
public void setStockInitial(int StockInitial) {
this.StockInitial = StockInitial;
}
public int getStockEntree() {
return StockEntree;
}
public void setStockEntree(int StockEntree) {
this.StockEntree = StockEntree;
}
public int getStockSortie() {
return StockSortie;
}
public void setStockSortie(int StockSortie) {
this.StockSortie = StockSortie;
}
public int getStockReel() {
return this.StockReel;
}
public void setStockReel(int StockReel) {
this.StockReel = StockReel;
}
}
Class 库存 用户可以输入产品详细信息的 jframe
package Inventory;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;
public class Inventory extends JFrame implements ActionListener {
public ArrayList<Produit> listProduit = new ArrayList<Produit>();
JLabel l1 = new JLabel("Code : ");
JLabel l2 = new JLabel("Stock initial : ");
JLabel l3 = new JLabel("Stock entree : ");
JLabel l4 = new JLabel("Stock sortie : ");
JTextField t1 = new JTextField(20);
JTextField t2 = new JTextField(20);
JTextField t3 = new JTextField(20);
JTextField t4 = new JTextField(20);
JButton b1 = new JButton("Suivant");
JButton b2 = new JButton("liste");
JFrame frame = new JFrame("Inventory");
public Inventory(){
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.getContentPane().add(l1);
frame.getContentPane().add(t1);
frame.getContentPane().add(l2);
frame.getContentPane().add(t2);
frame.getContentPane().add(l3);
frame.getContentPane().add(t3);
frame.getContentPane().add(l4);
frame.getContentPane().add(t4);
frame.getContentPane().add(b1);
frame.getContentPane().add(b2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b1.addActionListener(this);
b2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b1){
int code = Integer.parseInt(t1.getText());
int StockInitial = Integer.parseInt(t2.getText());
int StockEntree = Integer.parseInt(t3.getText());
int StockSortie = Integer.parseInt(t4.getText());
Produit p = new Produit(code,StockInitial,StockEntree,StockSortie);
listProduit.add(p);
}
if(e.getSource()==b2) {
new Liste().frame.setVisible(true);
}
}
public ArrayList<Produit> getList() {
return listProduit;
}
public static void main(String[] args) {
new Inventory().frame.setVisible(true);
}
}
Class库存向用户展示产品详情的jframe
package Inventory;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
public class Liste extends JFrame {
JFrame frame = new JFrame("Inventory");
String head[] = {"Code","Stock Intial","Stock Entree","Stock Sortie","Sotck Reel"};
String[][] Rows = {};
DefaultTableModel model = new DefaultTableModel(Rows,head);
Inventory n;
JTable table = new JTable(model);
JScrollPane sp = new JScrollPane(table);
Container con = null;
public Object[] objProduit;
public void addRowToJTable()
{
}
public Liste(){
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0);
for(int i=0;i<n.listProduit.size();i++){
Object[] obj = {n.listProduit.get(i).getCode(),n.listProduit.get(i).getStockInitial(),n.listProduit.get(i).getStockEntree(),n.listProduit.get(i).getStockSortie(),n.listProduit.get(i).getStockReel()};
model.addRow(obj);
}
//return 0
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
}
如果您希望 Liste
class 访问 Inventory
class 的 listProduit
,您有多种选择。
我喜欢的顺序:
1。将 listProduit
传递给 Liste
构造函数
在actionPerformed()
方法中,创建Liste
实例如下:
new Liste(listProduit).frame.setVisible(true);
为此,您需要按如下方式更改 Liste
构造函数:
private List<Produit> listProduit;
public Liste(List<Produit> listProduit) {
this.listProduit = listProduit;
model.setRowCount(0);
for (int i = 0; i < listProduit.size(); i++) {
Produit p = listProduit.get(i);
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
}
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
不需要 Liste
class 中的字段 Inventory n
。
2。将 Inventory
实例传递给 Liste
构造函数
在actionPerformed()
方法中,创建Liste
实例如下:
new Liste(this).frame.setVisible(true);
为此,您需要按如下方式更改 Liste
构造函数:
public Liste(Inventory inventory) {
this.n = inventory;
model.setRowCount(0);
for (int i = 0; i < n.listProduit.size(); i++) {
Produit p = n.listProduit.get(i);
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
}
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
3。使 listProduit
成为静态字段
这只是为了完整性。您应该创建尽可能少的静态字段 - 静态字段是一种懒惰的“解决方案”,如果您的程序增长,它可能会产生大问题,并且从这种方法更改为更好的方法(最好是第一种方法)越难,您拥有的代码越多依赖于静态字段。
在classInventory
中更改字段listProduit
的声明如下:
public static List<Produit> listProduit = new ArrayList<Produit>();
然后您可以按如下方式更改 Liste
的构造函数:
public Liste(Inventory inventory) {
model.setRowCount(0);
for (int i = 0; i < Inventory.listProduit.size(); i++) {
Produit p = Inventory.listProduit.get(i);
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
}
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
您可以使用增强的 for 循环或使用 List
接口的 forEach()
方法进一步改进构造函数。
使用增强的 for 循环:
private List<Produit> listProduit;
public Liste(List<Produit> listProduit) {
this.listProduit = listProduit;
model.setRowCount(0);
for (Produit p: listProduit) {
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
}
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}
与forEach()
:
private List<Produit> listProduit;
public Liste(List<Produit> listProduit) {
this.listProduit = listProduit;
model.setRowCount(0);
listProduit.forEach(p -> {
Object[] obj = { p.getCode(), p.getStockInitial(), p.getStockEntree(), p.getStockSortie(), p.getStockReel() };
model.addRow(obj);
});
System.out.println(n.listProduit.size());
frame.getContentPane().add(table);
frame.setLayout(new FlowLayout());
frame.setSize(400,300);
frame.add(sp);
}